梯度更新
举例说明
对于逻辑归回梯度求解:
假设预测输出函数:
i:一次输入中,第
i
个数据实际输出:
Cost Function函数:
j:第
j
个输入,总共输入m个数据梯度求解的最终目的:令 的值 最小,根据微积分,只要求出
根据导数的定义: , 肯定是往函数最小值方向移动,即
但是通常情况下,由于 很难直接求解出来,换个思路就是通过更新参数 来实现:
如何保证参数 更新方向是 ?
求解:
如何确定每次参数要更新多少?
对于参数更新公式:
一般:
小结:
PS:某个权重更新的值=0,即 ,并不代表
常见梯度更新方法
BGD
批次梯度下降
- 概念:每次更新所有样本数据来更新一次 的参数
- 预测函数:
- 对于cost function:
- 有参数更新公式:
- 这种参数更新方法是批量梯度更新,也就是每次更新 都需要用到这样本里所有数据
- 小结:
- 优点:没更新一次,都用所有样本数据进行更新,这样就求解了全局最优解,同时通过计算公式可以发现可以并行实现;
- 缺点:由于每次更新都要计算该批次训练样本数据,如果批次样本数量太大,训练过程会很慢
SGD
随机梯度下降
概念:由于BGD每次更新都需要用到批次里所有样本数据,所以引入随机梯度下降概念;和BGD的区别在于,每次训练样本只输入一个,通过不断输入不同样本来修正参数,而BGD是一次输入所有样本来修正参数
区别 BGD SGD 每次输入样本数 所有 1个 循环次数 一次 =样本数量 小结:
- 优点:训练速度快;
- 缺点:准确度下降(噪音比BGD大),并非全局最优解;不易于并行实现;
MBGD
小批量梯度下降
概念:结合了BGD和SGD的优点:将所有的样本分割成很多小份,每次用这个小样本进行BGD训练,即:
for SGD: for BGD: ...
- 小结:
- 目前算法比较常用的梯度下降算法用MBGD,常用的小份样本数量有:64、10
常用梯度更新公式推导
神经网络常用梯度更新公式推导
Pooling
- 在池化层,设置了固定的w,所以参数不在此更新
- 主要类似设置了反向传播的阀门,保证反向阀门开合以及打开大小
- 这里的pooling方法是一般池化,即池化过程中,各个模块的边界不重叠。除了不重叠方法外,还有重叠池化、空金字塔池化
Max Pooling
概念:反向传播求导数过程类似分段函数求导
分段函数在分段点的导数必须分别求左右导数,而在非分段点的导数如常
有矩阵如下:
求解整个矩阵的max_pooling,则:
反向传播时:
这个公式可以通过如下代码的条件语句实现:
if x_n == y: y_d = 1 else: y_d = 0
根据反向传播公式的链式原理:
如果pooling层对 偏导数为0,通过 向前的参数修正值都恒为0,即不传播;
小结:
对于max pooling参数只通过max值那个点反向传播,在上述例子中,即通过 向前修正参数,其他值均认为是无用数据丢弃;
Mean Pooling
概念:求解n x m矩阵的上所有点的均值
有矩阵如下:
- 求解整个矩阵的mean pooling,则:
- 反向传播时:
- 小结:
对于mean pooling ,反向传播过程中,只是给传播链条添加一个常数 ,即作为固定权重使用
激活函数
同Pooling,没有需要更新的权重,起到了传播过程中的阀门作用
ReLU
- 公式:
- 反向传播时:
- 小结:
对于输出值: 的神经元,流经ReLU层后的反向传播,该神经元以及前面对应的参数都会被丢弃,即不再更新参数
Sigmoid
- 公式:
- 反向传播时:
tanh
- 公式:
- 反向传播时:
soft Max
公式:
:第i个输入值
: 对应的输出值- 反向传播时:
Loss函数
交叉熵
理论上均方差 值小的程度,作为判断神经元预测结果和实际结果的偏离程度很好理解
但是,实际问题中,针对分类问题,交叉熵的表现比均方差来的好
- 设经过soft Max的神经元输出:
- 实际结果:
交叉熵公式:
:第k个样本的交叉熵
:某个样本的第i个类别预测结果
:某个样本的第i个类别实际结果- 反向传播时,
是已知值:
梯度更新代码实现
TBD