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

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神经元后,不会对其他数据有激活现象了,设置较小的学习率,这种情况会不那么频繁。
activation1
activation2
参考【这里

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

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

loss_function

延伸阅读1
延伸阅读2

4.BP,SGD公式推导

5.参数的更新方式

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

转载于:https://www.cnblogs.com/siucaan/p/9623113.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值