深度学习-激活函数与优化器

2019-07-19  本文已影响0人  莱昂纳多91

1,激活函数

具体激活函数参见此篇
https://www.jiqizhixin.com/articles/2017-10-10-3

激活函数从图像上来看通常比较简单。他的工作内容也很简单,就是对上一层输出a^{l-1}与本层权重W^l的加权求和值z^l做一个转换变成a^l。通常这个转换是非线性的。
那不要这个激活函数好不好?很容易证明,如果不用激活函数,神经网络会退化成简单线性函数:
\begin{alignedat}{2} a^0 &= x_0 \\ z^1&=W^1a^0+b^1 \\ a^1&=z^1 \\ z^2&=W^2z^1+b^2=W^2W^1a^0+W^2b^1+b^2 \\ z^3&=W^3z^2+b^3=W^3W^2W^1a^0+W^3W^2b^1+W^3b^2+b^3 \\ ... \\ z^l&=W^lz^{l-1}+b^l=\prod^{l}_{k=1}W^kx_0+fun(b)=Ax_0+b \\ \end{alignedat}
这相当于千辛万苦设计了一个网络,最后一看原来只是一组线性函数。隐层亦失去了意义。
而有了激活函数就不一样了,激活函数通常是非线性的,相当于为神经网络引入了非线性,上述式子就无法简化成简单线性函数:
\begin{alignedat}{2} a^0 &= x_0 \\ z^1&=W^1a^0+b^1 \\ a^1&=\sigma(z^1) \\ ... \\ z^l&=W^la^{l-1}+b^l \\ &=(z^l_0,z^l_1,...,z^l_{n_l})^T\\\\ a^l&=\sigma(z^l)=(\sigma(z^l_0),\sigma(z^l_1),...,\sigma(z^l_{n_l}))^T \\ \end{alignedat}
这是神经网络具有强大拟合能力的根源。
对比上述两个z^l
无激活函数的z实际上是只对输入做了一次线性转换
有激活函数的z实际上是对输入做了多次非线性转换,不同的激活函数,则又在非线性转换上产生不同的作用。

2,优化器 Optimizer

对于神经网络的损失优化,通常使用的是随机梯度下降SGD或批量梯度下降BGD或mini-batch梯度下降MBGD。梯度下降确实是一个根本,但是在每步梯度下降的步长(学习率learning rate)及其变化以及梯度下降方向的选择上则产生了很多变种。
具体参见此篇
优化器是什么?
是用来一步步优化参数W和b的。给一批样本,经过模型得到一个损失,通过损失反向求出各个参数对应的梯度,然后用本轮W减去这个(梯度乘以步长)得到新的W和b。这样一步步迭代,直到得到一个比较好的结果。这就是梯度下降的朴素思想。
然而实际情况却没有这么好。有许多乌云笼罩在这一步:

这些还好说,更严重的:

具体就参见上面的链接吧,总结的非常好了


yhq.gif
yhq2.gif

3,参考

https://www.cnblogs.com/guoyaohua/p/8542554.html
https://blog.csdn.net/tyhj_sf/article/details/79932893
https://www.jiqizhixin.com/articles/2017-10-10-3

上一篇 下一篇

猜你喜欢

热点阅读