机器学习面笔试-神经网络篇

1.为什么引入非线性激励函数?

因为如果不用非线性激励函数,每一层都是上一层的线性函数,无论神经网络多少层,输出都是输入的线性组合,与只有一个隐藏层效果一样。相当于多层感知机了。所以引入非线性激励函数,深层网络就变得有意义了,可以逼近任意函数。

2.常用的激励函数

1)sigmoid:将输出实值压缩到0-1之间。 缺点:(输入非常大或非常小的时候)容易梯度消失;sigmoid函数是非0均值的,下一层的神经元将从上一层神经元得到的非0 均值的信号作为输入,再结合w计算梯度,始终都是正的。(可根据batch调节)
2)Tanh:是0均值的。
3)Relu(修正线性单元):好处:收敛快,求梯度简单。具有稀疏特性。
(相比于sigmoid:sigmoid反向传播求误差梯度时,求导计算量很大,而relu求导简单;对于深层网络,sigmoid反向传播时,在sigmoid接近饱和区时,变换太缓慢,导数趋0,从而无法完成深层网络的训练;Relu会使一部分神经元的输出为0,造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题。)
缺点:训练的时候很脆弱,一个非常大的梯度流过一个Relu神经元后,不会对其他数据有**现象了,设置较小的学习率,这种情况会不那么频繁。
机器学习面笔试-神经网络篇
机器学习面笔试-神经网络篇
参考【这里

3.常用损失函数[更多]

0-1损失; 感知损失
Hinge损失; log损失、交叉熵
平方损失; 指数损失; 绝对值损失

机器学习面笔试-神经网络篇

延伸阅读1
延伸阅读2

4.BP,SGD公式推导

5.参数的更新方式

(1) Vanilla update: x+=learningratedx
(2) Momentum update动量更新:
v=μvlearningratedx # integrate velocity
x+=v # integrate position
(3) Nesterov Momentum:
xahead=x+μv
v=μvlearningratedxahead
x+=v
(4) Adagrad:
(自适应的方法,梯度大的方向学习率越来越小,由快到慢) cache+=dx2
x+=learningratedx/(np.sqrt(cache)+eps)
(5) Adam: m=β1m+(1β1)dx
v=β2v+(1β2)(dx2)
x+=learningratem/(np.sqrt(v)+eps)