神经网络模型底层原理与实现1—为什么要用激活函数,为什么要有反向传播

(本文假设读者已经了解了线性回归的基本原理)

1.为什么要用激活函数

a2221881788445bb8743fe3aa892e819.png

线性函数有很大的局限性,比如要拟合图中这根红线就无法只用线性函数做到,但可以用图中的几根蓝线+一个常量函数拟合, 但是图中的蓝线是无法用线性函数变换得到

8604cff119014fadb11404dd7d2ce20a.png 

但可以通过上图中的这条曲线近似,这个变化函数也就是常说的激活函数sigmoid

654ebadef81b4274b9452113e11a343f.png 

其中,参数w决定了函数的斜率,b决定了x轴方向位置,c决定了y方向的高度

接下来讲怎么由得到的表达式推出神经网络结构图

63096ea1afc64134a54b3d70b1082bd8.png 

已知所有函数均可近似表达为上方的表达式,则从右往左看这个图,第一个+节点就是用来算b1+西格玛(wij+xj),之后再往左经过蓝色激活函数得以此计算,不断循环叠加计算得神经网络图

2.得到一次输出后计算损失函数,并不断调节这个图里的参数即可,方法是用小批量梯度下降更新参数,那为什么要用小批量呢?因为每次用所有样本计算梯度复杂度太高,故把样本n等分,每次计算用一份来更新c562651c752e460292d79937f0705a99.png

3. 为什么需要反向传播:一句话,为了求损失

f9114a9874cf40bda26792db4de30341.png

这个式子表示一次训练的总损失等于所有样本损失和,也就是只要求c(总的损失)对w偏导即可

46eda6222a224a20a8b45017e9cab10a.png

c对w的偏导=dc/dz *dz/dw( 第一项叫反向传播,第二项叫正向传播很好算)

a06922ab3ab7491aa54f4ff3c3dfb914.png

而dc/dz=da/dz * dc/da,第一项是激活函数的导数,第二项需要根据后面的网络结构再算,由链式法则可得第二个式子,可见这个问题递归了

 d3011271f31c455ba16a5af9e76e3be5.png

 为了解决这个问题,可以反过来算一遍(按照红色箭头方向)根据链式法则依次记录下所有dc/dz的值,从而求出总的损失函数

2e9b437df02047fdaba755067ffb2710.png

 

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值