Press "Enter" to skip to content

【南瓜书ML】(task4)神经网络中的数学推导(更新ing)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

学习总结

 

(1)BP神经网络是现在很多深度学习网络的基础,前向传播和梯度下降求解loss损失函数,寻找最佳参数。

 

(2)防止过拟合:正则化,早停。

 

(3)防止进入局部极小值等:模拟退火or随机梯度下降。

 

文章目录

一、神经元模型和MLP基础

1.1 BP神经网络如何学习
1.2 线性可分和非线性可分

三、全局最小 与 局部极小

一、神经元模型和MLP基础

 

如CTR任务中,判断用户有点击过这个物品”等等。细胞体在接收到这些信号的时候,会做一个简单的判断,然后通过轴突输出一个信号,这个输出信号大小代表了用户对这个物品的感兴趣程度。

 

基于Sigmoid激活函数的神经元

上图中的激活函数是 sigmoid 激活函数,它的数学定义是: f ( z ) = 1 1 + e − z f(z)=\frac{1}{1+\mathrm{e}^{-z}} f ( z ) = 1 + e − z 1 ​ 它的函数图像就是上图中的 S 型曲线,它的作用:

把输入信号从(-∞,+∞)的定义域映射到(0,1)的值域(因为在点击率预测,推荐问题中,往往是要预测一个从 0 到 1 的概率)。
sigmoid 函数处处可导,方便之后的梯度下降学习过程,所以它成为了经常使用的激活函数。比较流行的还有 tanh、ReLU 等。

1.1 BP神经网络如何学习

 

多神经元构成的网络具有更强的拟合数据能力,如下图的一个由输入层、两神经元隐层和单神经元输出层组成的简单神经网络:

 

每个蓝色神经元的构造都和刚才的单神经元构造相同,h1和 h2神经元的输入是由 x1和 x2组成的特征向量,而神经元 o1的输入则是由 h1和 h2输出组成的输入向量。

 

神经网络的重要训练方法,前向传播(Forward Propagation)和反向传播(Back Propagation)。

 

(1)前向传播

 

前向传播的目的是在当前网络参数的基础上得到模型对输入的预估值,也就是我们常说的模型推断过程。比如说,我们要通过一位同学的体重、身高预测 TA 的性别,前向传播的过程就是给定体重值 71,身高值 178,经过神经元 h1、h2和 o1的计算,得到一个性别概率值,比如说 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| l 1 ​ ( y i ​ , y ^ ​ i ​ ) = ∣ y i ​ − y ^ ​ i ​ ∣

 

(3)梯度下降

 

发现了预测值和真实值之间的误差(Loss),我们就要用这个误差来指导权重的更新,让整个神经网络在下次预测时变得更准确。最常见的权重更新方式就是梯度下降法,它是通过求取偏导的形式来更新权重的。比如,我们要更新权重 w5,就要先求取损失函数到 w5 的偏导 ∂ L o 1 ∂ w 5 \frac{\partial L_{o 1}}{\partial w_{5}} ∂ w 5 ​ ∂ L o 1 ​ ​ ​​从数学角度来看,梯度的方向是函数增长速度最快的方向,那幺梯度的反方向就是函数下降最快的方向,所以让损失函数减小最快的方向就是我们希望梯度 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}} w 5 t + 1 ​ = ∂ w 5 ​ ∂ L o 1 ​ ​ ​​公式中的 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}} ∂ w 1 ​ ∂ L o 1 ​ ​ = ∂ h 1 ​ ∂ L o 1 ​ ​ ⋅ ∂ w 1 ​ ∂ h 1 ​ ​

 

1.2 线性可分和非线性可分

 

要解决非线性可分问题,需要考虑用多层功能神经元。如下即可以解决异或问题的两层感知机:

 

二、误差逆传播BP算法

BP算法的思想:首先将误差反向传播给隐含层神经元,调节隐含层到输出层的连接权重与输出层神经元的阈值;接着根据隐含层神经元的均方误差,来调节输入层到隐含层的连接权值与隐含层神经元的阈值。
BP算法的目标:最小化训练集D上的累计误差: E = 1 m ∑ k = 1 m E k E=\frac{1}{m} \sum_{k=1}^{m} E_{k} k = 1 ∑ m ​ E k ​

BP算法基本流程:

 

输入:

训练集
D = { ( x k , y k ) } k = 1 m D=\left\{\left(x_{k}, y_{k}\right)\right\}_{k=1}^{m} { ( x k ​ , y k ​ ) } k = 1 m ​

;学习率

 

η \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 ( x k ​ , y k ​ ) ∈ D do

 

(4) ————根据当前参数和 y ^ j k = f ( β j − θ j ) \hat{y}_{j}^{k}=f\left(\beta_{j}-\theta_{j}\right) y ^ ​ j k ​ = 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) y ^ ​ j k ​ ( 1 − y ^ ​ j k ​ ) ( y j k ​ − y ^ ​ j k ​ ) 计算输出层神经元的梯度项 g j g_{j} g j ​ ;

 

(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} b h ​ ( 1 − b h ​ ) ∑ j = 1 l ​ w hj ​ g j ​ 隐藏层神经元的梯度项 e h e_{h} e h ​ ;

 

(7) ————更新连接权 w h j , v i h w_{h j}, v_{i h} w hj ​ , v ih ​ 与阈值 θ 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}, λ k = 1 ∑ m ​ E k ​ + ( 1 − λ ) i ∑ ​ w i 2 ​ ,

E k E_{k} E k ​ 表示第 k k k 个训练样例上的误差,
w i w_{i} w i ​ 表示连接权和阈值
λ ∈ ( 0 , 1 ) \lambda \in(0,1) ( 0 , 1 ) 用于对经验误差与网络复杂度这两项进行折中, 常通过交叉验证法来估计.

三、全局最小 与 局部极小

基于梯度的搜索(梯度下降法)是使用最广泛的参数寻优方法。但是如果误差函数有多个局部极小值,误差函数若在当前点的梯度为0,则不能保证找到的解是全局最小。
试图跳出局部极小值:

模拟退火:在每一步都以一定的概率接受比当前解更差的结果。
随机梯度下降:在计算梯度时加入随机因素,所以即使陷入局部极小值点,计算出来的梯度仍可能不为0,就有机会跳出局部极小继续搜索最优参数。

Reference

 

[1] 陈希孺编着.概率论与数理统计[M].中国科学技术大学出版社,2009

 

[2] B 站视频教程:https://www.bilibili.com/video/BV1Mh411e7VU

 

[3] 线上南瓜书:https://datawhalechina.github.io/pumpkin-book/#/chapter1/chapter1

 

[4] 开源地址:https://github.com/datawhalechina/pumpkin-book

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注