【南瓜书ML】(task4)神经网络中的数学推导(更新ing)
时间:2023-09-09 18:37:02
学习总结
(1)BP神经网络是许多深度学习网络的基础,向前传播和梯度下降loss寻找最佳参数的损失函数。
(2)防止过拟合:正则化,早停。
(3)防止局部极小值等。or随机梯度下降。
文章目录
- 学习总结
- 一、神经元模型和MLP基础
-
- 1.1 BP如何学习神经网络
-
- (1)前向传播
- (2)损失函数
- (3)梯度下降
- 1.2 线性可分和非线性可分
- 二、误差逆传播BP算法
- 三、全局最小 与 局部极小
- Reference
一、神经元模型和MLP基础
如CTR在任务中,判断用户点击了项目等。当细胞接收到这些信号时,它们会做出简单的判断,然后通过轴突输出信号,代表用户对项目的兴趣。
上图中的激活函数是 sigmoid 其数学定义是: f ( z ) = 1 1 e ? z f(z)=\frac{1}{1 \mathrm{e}^{-z}} f(z)=1 e?z1它的函数图像在上图中 S 型曲线,其作用:
- 把输入信号从(-∞, ∞)因为在点击率预测,在推荐问题中,通常需要预测从 0 到 1 的概率)。
- sigmoid 函数处处可导,便于梯度下降后的学习过程,因此成为常用的激活函数。更受欢迎的是 tanh、ReLU 等。
1.1 BP如何学习神经网络
由多神经元组成的网络具有较强的拟合数据能力,如下图所示,
每一个蓝色神经元的结构刚才的单神经元相同,h1和 h神经元的输入是由的 x1和 x由神经元组成的特征向量 o输入为1 h1和 h输出组成的输入向量。
神经网络的重要训练方法,向前传播(Forward Propagation)和反向传播(Back Propagation)。
(1)前向传播
前向传播的目的是在当前网络参数的基础上获得模型对输入的估计,即模型推断过程。例如,我们应该通过同学的体重和身高来预测 TA 前向传播的性别过程是给定体重值 71,身高值 经过神经元的178 h1、h2和 o计算1,得到性别概率值,例如 0.87,这就是 TA 可能是男性的概率。
(2)损失函数
如果同学的真实性别是男性,那么真正的概率值就是 1,根据公式 2 定义绝对值误差,预测损失是|1-0.87| = 0.13。
l 1 ( y i , y ^ i ) = ∣ y i ? y ^ i ∣ l_{1}\left(y_{i}, \hat{y}_{i}\right)=\left|y_{i}-\hat{y}_{i}\right| l1(yi,y^i)=∣yi−y^i∣
(3)梯度下降
发现了预测值和真实值之间的误差(Loss),我们就要用这个误差来指导权重的更新,让整个神经网络在下次预测时变得更准确。最常见的权重更新方式就是梯度下降法,它是通过求取偏导的形式来更新权重的。比如,我们要更新权重 w5,就要先求取损失函数到 w5 的偏导 ∂ L o 1 ∂ w 5 \frac{\partial L_{o 1}}{\partial w_{5}} ∂w5∂Lo1从数学角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数下降最快的方向,所以让损失函数减小最快的方向就是我们希望梯度 w5 更新的方向。这里我们再引入一个超参数α,它代表了梯度更新的力度,也称为学习率。现在可以写出梯度更新的公式了: w 5 t + 1 = w 5 t − α ∗ ∂ L o 1 ∂ w 5 w_{5}^{t+1}=w_{5}^{t}-\alpha * \frac{\partial L_{o 1}}{\partial w_{5}} w5t+1=w5t−α∗∂w5∂Lo1公式中的 w5当然可以换成其他要更新的参数,公式中的 t 代表着更新的次数。
对输出层神经元来说(图中的 o1),我们可以直接利用梯度下降法计算神经元相关权重(即图 5 中的权重 w5和 w6)的梯度,从而进行权重更新,但对隐层神经元的相关参数(比如 w1),我们又该如何利用输出层的损失进行梯度下降呢?
——“利用求导过程中的链式法则(Chain Rule)”。通过链式法则我们可以解决梯度逐层反向传播的问题。最终的损失函数到权重 w1的梯度是由损失函数到神经元 h1输出的偏导,以及神经元 h1输出到权重 w1的偏导相乘而来的。也就是说,最终的梯度逐层传导回来,“指导”权重 w1的更新。
∂ L o 1 ∂ w 1 = ∂ L o 1 ∂ h 1 ⋅ ∂ h 1 ∂ w 1 \frac{\partial L_{o 1}}{\partial w_{1}}=\frac{\partial L_{o 1}}{\partial h_{1}} \cdot \frac{\partial h_{1}}{\partial w_{1}} ∂w1∂Lo1=∂h1∂Lo1⋅∂w1∂h1
1.2 线性可分和非线性可分
要解决非线性可分问题,需要考虑用多层功能神经元。如下即可以解决异或问题的两层感知机:
二、误差逆传播BP算法
- BP算法的思想:首先将误差反向传播给隐含层神经元,调节隐含层到输出层的连接权重与输出层神经元的阈值;接着根据隐含层神经元的均方误差,来调节输入层到隐含层的连接权值与隐含层神经元的阈值。
- BP算法的目标:最小化训练集D上的累计误差: E = 1 m ∑ k = 1 m E k E=\frac{1}{m} \sum_{k=1}^{m} E_{k} E=m1k=1∑mEk
BP算法基本流程:
输入:
训练集 D = { ( x k , y k ) } k = 1 m D=\left\{\left(x_{k}, y_{k}\right)\right\}_{k=1}^{m} D={
(xk,yk)}k=1m;学习率 η \eta η
过程:
(1) 在 ( 0 , 1 ) (0,1) (0,1) 范围内随机初始化网络中所有连接权和阈值;
(2) repeat
(3) ——for all ( x k , y k ) ∈ D \left(x_{k}, y_{k}\right) \in D (xk,yk)∈D do
(4) ————根据当前参数和 y ^ j k = f ( β j − θ j ) \hat{y}_{j}^{k}=f\left(\beta_{j}-\theta_{j}\right) y^jk=f(βj−θj) 计算当前样本的输出 y ^ k \hat{y}_{k} y^k;
(5) ————根据 g j = y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) g_{j}=\hat{y}_{j}^{k}\left(1-\hat{y}_{j}^{k}\right)\left(y_{j}^{k}-\hat{y}_{j}^{k}\right) gj=y^jk(1−y^jk)(yjk−y^jk) 计算输出层神经元的梯度项 g j g_{j} gj;
(6) ————根据 e h = b h ( 1 − b h ) ∑ j = 1 l w h j g j e_{h}=b_{h}\left(1-b_{h}\right) \sum_{j=1}^{l} w_{h j} g_{j} eh=bh(1−bh)∑j=1lwhjgj 隐藏层神经元的梯度项 e h e_{h} eh;
(7) ————更新连接权 w h j , v i h w_{h j}, v_{i h} whj,vih 与阈值 θ j , γ h \theta_{j}, \gamma_{h} θj,γh;
(8) ——end for
(9) until 达到停止条件
输出:连接权与阈值确定的多层前馈神经网络
防止过拟合:
- 早停(early stopping):将数据分成训练集和验证集,训练集用来计算梯度、更新权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同事返回具有最小验证集误差的连接权和阈值。
- 正则化(regularization):在loss函数中增加一个用来描述网络复杂度的式子,如连接权和阈值的平方和: E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 , E=\lambda \frac{1}{m} \sum_{k=1}^{m} E_{k}+(1-\lambda) \sum_{i} w_{i}^{2}, E=λm1k=1元器件数据手册、IC替代型号,打造电子元器件IC百科大全!