[机器学习实战] - 笔记 - BP神经网络

本文介绍了BP(反向传播)神经网络的基本结构和原理,详细推导了代价函数及其梯度下降的公式,并概述了反向传播在权重和偏置更新中的步骤。同时,提供了前向传播计算、误差传播和权重更新的总结。此外,还分享了相关代码资源和学习资料。
摘要由CSDN通过智能技术生成

BP 神经网络结构原理

  1. 神经网络结构
    用ProcessOn软件画的,神经网络结构中变量非常多,部分标注便于理解。
    在这里插入图片描述

  2. 定义变量
    n l n_l nl : 网络层数,即输入层+隐藏层 + 输出层 (有些参考书不计算输入层)
    S l S_{l} Sl:第 l l l层神经元的个数
    ω i j ( l ) \omega^{(l)}_{ij} ωij(l) : 第 l l l+1层的第 i i i个神经元和第 l l l层的第 j j j个神经元连接的权重weight
    b i ( l ) b^{(l)}_{i} bi(l) :第 l l l层第 i i i个神经元的偏置bias
    z i ( l ) z^{(l)}_{i} zi(l) :第 l l l层第 i i i个神经元的权重累计 z i ( l ) = ∑ j = 1 n l ω i j ⋅ a j ( l ) + b i ( l ) z^{(l)}_{i} = \sum_{j=1}^{n_l} \omega_{ij}\cdot a_j^{(l)} + b_i^{(l)} zi(l)=j=1nlωijaj(l)+bi(l)
    a i ( l ) a^{(l)}_{i} ai(l) :第 l l l层第 i i i个神经元的激活函数后的值(常见激活函数 Sigmoid,ReLu 等)
    h ω , b ( x ) h_{\omega,b}(x) hω,b(x):最终输出值,例如输出层神经元个数为 n,则为 (n,1) 向量
    α \alpha α :学习率 learning rate

BP 神经网络公式推导

  1. 对于单个样本,代价函数 cost function是误差平方和MSE:
    J ( ω , b ) = 1 2 ∣ ∣ h ω , b ( x ) − y ∣ ∣ 2 J(\omega,b) = \frac{1}{2} ||h_{\omega,b}(x) - y||^2 J(ω,b)=21hω,b(x)y2
  2. 对于全部样本,代价函数如下,后项是正则项,每层所有连接神经元的权重平方和:
    J ( ω , b ) = [ 1 m ∑ i = 1 m J ( ω , b ; x i , y i ) ] + λ 2 ∑ l = 1 n l − 1 ∑ i = 1 S l ∑ j = 1 S l + 1 ( ω j i ( l ) ) 2 J(\omega,b) = [\frac{1}{m}\sum^m_{i=1}J(\omega,b;x_i,y_i)] + \frac{\lambda}{2}\sum^{n_l-1}_{l=1}\sum^{S_l}_{i=1}\sum^{S_l+1}_{j=1}(\omega_{ji}^{(l)})^2 J(ω,b)=[m1i=1mJ(ω,b;xi,yi)]+2λl=1nl1i=1Slj=1Sl+1(ωji(l))2
  3. 一般通过 梯度下降法求得最优解 ω i j ( l ) \omega_{ij}^{(l)} ωij(l) b i ( l ) b_i^{(l)} bi(l) 当代价函数 J ( ω , b ) J(\omega,b) J(ω,b) 取得最小值时。局部下降最快的方向为梯度的负方向。
    ω i j ( l ) = ω i j ( l ) − ∂ ∂ ω i j ( l ) J ( ω , b ) \omega_{ij}^{(l)} = \omega_{ij}^{(l)} - \frac{\partial}{\partial \omega_{ij}^{(l)}} J(\omega,b) ωij(l)=ωij(l)ωij(l)J(ω,b) b i ( l ) = b i ( l ) − ∂ ∂ b i ( l ) J ( ω , b ) b_i^{(l)} = b_i^{(l)} - \frac{\partial}{\partial b_i^{(l)}} J(\omega,b) bi(l)=bi(l)bi(l)J(ω,b)
  4. 如果神经网络层数以及变量非常多,普通梯度下降法不适用于该情况,改用后向传播实现梯度下降,只针对前一层求偏导。
    ∂ ∂ ω i j ( l ) J ( ω , b ) = 1 m ∑ i = 1 m ∂ ∂ ω i j ( l ) J ( ω , b ; x i , y i ) + λ ω i j ( l ) \frac{\partial}{\partial \omega_{ij}^{(l)}} J(\omega,b) = \frac{1}{m}\sum^m_{i=1}\frac{\partial}{\partial \omega_{ij}^{(l)}} J(\omega,b;x_i,y_i) + \lambda\omega_{ij}^{(l)} ωij(l)J(ω,b)=m1i=1mωij(l)J(ω,b;xi,yi)+λωij(l) ∂ ∂ b i ( l ) J ( ω , b ) = 1 m ∑ i = 1 m ∂ ∂ b i ( l ) J ( ω , b ; x i , y i ) \frac{\partial}{\partial b_i^{(l)}} J(\omega,b) = \frac{1}{m}\sum^m_{i=1}\frac{\partial}{\partial b_i^{(l)}} J(\omega,b;x_i,y_i) bi(l)J(ω,b)=m1i=1mbi(l)J(ω,b;xi,yi)
  5. 最后一层,其中用到 chain rule 链式法则,展开推导,打公式太累了,歇了歇了,后期传一张手写的。
    ∂ ∂ ω i j ( n l − 1 ) J ( ω , b ) \frac{\partial}{\partial \omega_{ij}^{(n_l-1)}} J(\omega,b) ωij(nl1)J(ω,b)
  6. 倒数第二层
    ∂ ∂ ω i j ( n l − 2 ) J ( ω , b ) \frac{\partial}{\partial \omega_{ij}^{(n_l-2)}} J(\omega,b) ωij(nl2)J(ω,b)
  7. 归纳误差偏导 σ \sigma σ

❗ 步骤总结:

① 前向传播,计算每层的激活函数值 z i z_i zi -> a i a_i ai
② 最后 n l n_l nl层,计算误差 σ ( n l ) \sigma^{(n_l)} σ(nl)
σ i ( n l ) = − ( y i − a i ( n l ) ) ⋅ f ′ ( z i ( l ) ) \sigma_i^{(n_l)} = - (y_i - a_i^{(n_l)})\cdot f^{'}(z_i^{(l)}) σi(nl)=(yiai(nl))f(zi(l))
③ 对于其他层
σ i ( l ) = − ∑ j = 1 S l + 1 ⋅ ω [ j i ] ( l ) f ′ ( z i ( l ) ) \sigma_i^{(l)} = - \sum_{j=1}^{S_l+1}\cdot \omega_[ji]^{(l)} f^{'}(z_i^{(l)}) σi(l)=j=1Sl+1ω[ji](l)f(zi(l))
结论:权重和偏置更新
ω i j ( l ) = ω i j ( l ) − α ⋅ a j ( l ) σ i ( l ) \omega_{ij}^{(l)} = \omega_{ij}^{(l)} - \alpha\cdot a_j^{(l)}\sigma_i^{(l)} ωij(l)=ωij(l)αaj(l)σi(l) b i ( l ) = b i ( l ) − α ⋅ σ i ( l ) b_i^{(l)} = b_i^{(l)} - \alpha\cdot \sigma_i^{(l)} bi(l)=bi(l)ασi(l)

代码分享

代码采用随机梯度下降批量算法,缺点是没有用矩阵运算而全部向量运算,不推荐。如果感兴趣,搜吴恩达的深度学习课程,参考其代码。
链接: https://pan.baidu.com/s/1CbxEAx047i3t8MkAekxhKA
提取码: i1n6

Reference

书籍:
神经网络与深度学习 - Michael Nielsen
B站视频:
深度学习之神经网络的结构 Part 1 ver 2.0
深度学习之梯度下降法 Part 2 ver 0.9 beta
深度学习之反向传播算法 上/下 Part 3 ver 0.9 beta

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值