《吴恩达机器学习》笔记——10 神经网络参数的反向传播算法

《吴恩达机器学习》笔记——10 神经网络参数的反向传播算法

1 代价函数

参数表达
训练集 { ( x ( 1 ) , y ( 1 ) ) , ( x ( 2 ) , y ( 2 ) ) , … , ( x ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),\dots,(x^{(m)},y^{(m)})\} {(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))}
L L L神经网络结构的总层数
s l s_l sl l l l层的单元数(不包括第 l l l层的偏差单元)
分类二元分类多元分类( K K K类)
y y y y = 0    o r    1 y=0\;or\;1 y=0or1 y ∈ R K y\in\mathbb{R}^K yRK
例 如 [ 1 0 0 0 ] , [ 0 1 0 0 ] , [ 0 0 1 0 ] , [ 0 0 0 1 ] 例如\left[\begin{matrix}1\\0\\0\\0\end{matrix}\right],\left[\begin{matrix}0\\1\\0\\0\end{matrix}\right],\left[\begin{matrix}0\\0\\1\\0\end{matrix}\right],\left[\begin{matrix}0\\0\\0\\1\end{matrix}\right] 1000,0100,0010,0001
输出单元个数1 K ( K ⩾ 3 ) K(K\geqslant3) K(K3)
-代价函数
逻辑回归 J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=-\frac{1}{m}\left[\sum\limits^m_{i=1}y^{(i)}\log h_\theta(x^{(i)})+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))\right]\\+\frac{\lambda}{2m}\sum\limits^n_{j=1}\theta_j^2 J(θ)=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2
神经网络 J ( Θ ) = − 1 m [ ∑ i = 1 m ∑ k = 1 K y k ( i ) log ⁡ ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) log ⁡ ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 J(\Theta)=-\frac{1}{m}\left[\sum\limits^m_{i=1}\sum\limits^K_{k=1}y^{(i)}_k\log( h_\Theta(x^{(i)}))_k+(1-y^{(i)}_k)\log(1-(h_\Theta(x^{(i)}))_k)\right]\\+\frac{\lambda}{2m}\sum\limits^{L-1}_{l=1}\sum\limits^{s_l}_{i=1}\sum\limits^{s_{l+1}}_{j=1}(\Theta_{ji}^{(l)})^2 J(Θ)=m1[i=1mk=1Kyk(i)log(hΘ(x(i)))k+(1yk(i))log(1(hΘ(x(i)))k)]+2mλl=1L1i=1slj=1sl+1(Θji(l))2
( h Θ ( x ) ∈ R K ( h Θ ( x ) ) i : 第 i 个 输 出 ) \left(h_\Theta(x)\in\mathbb{R}^K\quad(h_\Theta(x))_i:第i个输出\right) (hΘ(x)RK(hΘ(x))ii)

2 反向传播算法(Back Propagation Algorithm)

-表达
J ( Θ ) J(\Theta) J(Θ) − 1 m [ ∑ i = 1 m ∑ k = 1 K y k ( i ) log ⁡ ( h Θ ( x ( i ) ) ) k + ( 1 − y k ( i ) ) log ⁡ ( 1 − ( h Θ ( x ( i ) ) ) k ) ] + λ 2 m ∑ l = 1 L − 1 ∑ i = 1 s l ∑ j = 1 s l + 1 ( Θ j i ( l ) ) 2 -\frac{1}{m}\left[\sum\limits^m_{i=1}\sum\limits^K_{k=1}y^{(i)}_k\log( h_\Theta(x^{(i)}))_k+(1-y^{(i)}_k)\log(1-(h_\Theta(x^{(i)}))_k)\right]\\+\frac{\lambda}{2m}\sum\limits^{L-1}_{l=1}\sum\limits^{s_l}_{i=1}\sum\limits^{s_{l+1}}_{j=1}(\Theta_{ji}^{(l)})^2 m1[i=1mk=1Kyk(i)log(hΘ(x(i)))k+(1yk(i))log(1(hΘ(x(i)))k)]+2mλl=1L1i=1slj=1sl+1(Θji(l))2
目标 min ⁡ Θ J ( Θ ) \min\limits_\Theta J(\Theta) ΘminJ(Θ)
计算 J ( Θ ) J(\Theta) J(Θ)
∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta_{ij}^{(l)}}J(\Theta) Θij(l)J(Θ)
-反向传播(假设 L = 4 L=4 L=4
概念对于每一个结点,计算 δ j ( l ) \delta^{(l)}_j δj(l):第 l l l层的第 j j j个结点的误差
δ j ( 4 ) \delta^{(4)}_j δj(4) a j ( 4 ) − y j = ( h Θ ( x ) ) j − y j a^{(4)}_j-y_j=(h_\Theta(x))_j-y_j aj(4)yj=(hΘ(x))jyj
δ ( 4 ) \delta^{(4)} δ(4) a ( 4 ) − y a^{(4)}-y a(4)y
δ ( 3 ) \delta^{(3)} δ(3) ( Θ ( 3 ) ) T δ ( 4 ) . ∗ g ′ ( z ( 3 ) ) (\Theta^{(3)})^\mathrm{T}\delta^{(4)}.*g'(z^{(3)}) (Θ(3))Tδ(4).g(z(3))
δ ( 2 ) \delta^{(2)} δ(2) ( Θ ( 2 ) ) T δ ( 3 ) . ∗ g ′ ( z ( 2 ) ) (\Theta^{(2)})^\mathrm{T}\delta^{(3)}.*g'(z^{(2 )}) (Θ(2))Tδ(3).g(z(2))
g ′ ( z ( 3 ) ) g'(z^{(3)}) g(z(3)) a ( 3 ) . ∗ ( 1 − a ( 3 ) ) a^{(3)}.*(1-a^{(3)}) a(3).(1a(3))
g ′ ( z ( 2 ) ) g'(z^{(2)}) g(z(2)) a ( 2 ) . ∗ ( 1 − a ( 2 ) ) a^{(2)}.*(1-a^{(2)}) a(2).(1a(2))
∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J(\Theta) Θij(l)J(Θ) a j ( l ) δ i ( l + 1 ) a_j^{(l)}\delta_i^{(l+1)} aj(l)δi(l+1)(忽略 λ \lambda λ或者 λ = 0 \lambda=0 λ=0
-反向传播算法
训练集 { ( x ( 1 ) , y ( 1 ) ) , … , ( x ( m ) , y ( m ) ) } \{(x^{(1)},y^{(1)}),\dots,(x^{(m)},y^{(m)})\} {(x(1),y(1)),,(x(m),y(m))}
Δ i j ( l ) \Delta_{ij}^{(l)} Δij(l)0(用于计算 ∂ ∂ Θ i j ( l ) J ( Θ ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J(\Theta) Θij(l)J(Θ)
f o r    i = 1 : m for\;i=1:m fori=1:m a ( 1 ) = x ( i ) a^{(1)}=x^{(i)} a(1)=x(i)
前向传播计算 a ( l ) , l = 2 , 3 , … , L a^{(l)},l=2,3,\dots,L a(l),l=2,3,,L
计算 δ ( L ) = a ( L ) − y ( i ) \delta^{(L)}=a^{(L)}-y^{(i)} δ(L)=a(L)y(i)
计算 δ ( L − 1 ) , δ ( L − 2 ) , … , δ ( 2 ) \delta^{(L-1)},\delta^{(L-2)},\dots,\delta^{(2)} δ(L1),δ(L2),,δ(2)
( Δ i j ( l ) : = Δ i j ( l ) + a j ( l ) δ i ( l + 1 ) ) \left(\Delta^{(l)}_{ij}:=\Delta^{(l)}_{ij}+a_j^{(l)}\delta_i^{(l+1)}\right) (Δij(l):=Δij(l)+aj(l)δi(l+1))
Δ ( l ) : = Δ ( l ) + δ ( l + 1 ) ( a ( l ) ) T \Delta^{(l)}:=\Delta^{(l)}+\delta^{(l+1)}(a^{(l)})^\mathrm{T} Δ(l):=Δ(l)+δ(l+1)(a(l))T
计算 D i j ( l ) : = { 1 m Δ i j ( l ) + λ Θ i j ( l ) 若 j ≠ 0 1 m Δ i j ( l ) 若 j = 0 D^{(l)}_{ij}:=\left\{\begin{matrix}\frac{1}{m}\Delta^{(l)}_{ij}+\lambda\Theta_{ij}^{(l)}&若j\neq0\\\frac{1}{m}\Delta^{(l)}_{ij}&若j=0\end{matrix}\right. Dij(l):={m1Δij(l)+λΘij(l)m1Δij(l)j=0j=0
得到 ∂ ∂ Θ i j ( l ) J ( Θ ) = D i j ( l ) \frac{\partial}{\partial\Theta^{(l)}_{ij}}J(\Theta)=D^{(l)}_{ij} Θij(l)J(Θ)=Dij(l)

3 使用注意:参数展开[code]

4 梯度检测[code]

梯度数值估计 d d θ J ( θ ) ≈ \frac{d}{d\theta}J(\theta)\approx dθdJ(θ)
双侧偏分[code] J ( θ + ϵ ) − J ( θ − ϵ ) 2 ϵ ,    ϵ = 1 0 − 4 \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{2\epsilon},\;\epsilon=10^{-4} 2ϵJ(θ+ϵ)J(θϵ),ϵ=104
单侧偏分 J ( θ + ϵ ) − J ( θ − ϵ ) ϵ ,    ϵ = 1 0 − 4 \frac{J(\theta+\epsilon)-J(\theta-\epsilon)}{\epsilon},\;\epsilon=10^{-4} ϵJ(θ+ϵ)J(θϵ),ϵ=104
步骤1. 通过反向传播计算DVec
2. 实现数值上的梯度检验来计算gradApprox
3. 确保DVec和gradApprox都能得出相似的值
4. 在使用反向传播进行学习时,关闭梯度检测
要点在训练分类器的过程中关闭梯度检测

5 随机初始化

目的解决对称权重问题(所有的权重都是一样的)
解决[code]初始化每一个 Θ i j ( l ) 为 \Theta_{ij}^{(l)}为 Θij(l) [ − ϵ , ϵ ] [-\epsilon,\epsilon] [ϵ,ϵ]中的一个随机值

6 组合在一起

参数训练神经网络
输入单元的个数特征 x ( i ) x^{(i)} x(i)的维度
输出单元的个数分类的数目
隐藏层单元的个数与隐藏层的数目(默认合理)只使用单个隐藏层
不止一个隐藏层时,每个隐藏层通常都应有相同的单元数
实现步骤1. 随机初始化权重
2. 前向传播,计算每个 x ( i ) x^{(i)} x(i) h Θ ( x ( i ) ) h_\Theta(x^{(i)}) hΘ(x(i))
3. 计算代价函数 J ( Θ ) J(\Theta) J(Θ)
4. 反向传播,计算 ∂ ∂ Θ j k ( l ) J ( Θ ) \frac{\partial}{\partial\Theta_{jk}^{(l)}}J(\Theta) Θjk(l)J(Θ)
5. 梯度检测,比较反向传播得到的偏导和使用梯度检测得到的梯度(然后关闭梯度检测)
6. 利用反向传播,使用梯度下降或其他优化算法来最小化 J ( Θ ) J(\Theta) J(Θ)

P.S. Matlab

3

% 定义矩阵
Theta1 = ones(10,11);
Theta2 = 2*ones(10,11);
Theta3 = 3*ones(1,11);
% 矩阵展为向量
thetaVec = [Theta1(:); Theta2(:); Theta3(:)];
DVec = [D1(:); D2(:); D3(:)];
% 向量转换为矩阵
Theta1 = reshape(thetaVec(1:110),10,11);
Theta2 = reshape(thetaVec(111:220),10,11);
Theta3 = reshape(thetaVec(221:231),1,11);
% initialTheta->fminunc(@costFunction, initialTheta, options)
function [jVal, gradientVec] = costFunction(thetaVec)
	% 从thetaVec中获取theta1,theta2,theta3
	% 前向传播、反向传播,计算D1,D2,D3,J
	%D1,D2,D3转换为gradientVec

4

for i = 1:n,
	thetaPlus = theta;
	thetaPlus(i) = thetaPlus(i) + EPSILON;
	thetaMinus = theta;
	thetaMinus(i) = thetaMinus(i) - EPSILON;
	gradApprox(i) = (J(thetaPlus) - J(thetaMinus)) / (2*EPSILON);
end;
% 检验:gradApprox是否约等于DVec
% 双侧偏分
gradApprox = (J(theta + EPSILON) - J(theta - EPSILON)) / (2*EPSILON)

5

Theta1 = rand(10,11)*(2*INIT_EPSILON) - INIT_EPSILON;
Theta2 = rand(1,11)*(2*INIT_EPSILON) - INIT_EPSILON;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值