Datawhale学习的打卡LeeML-Task04
Task04:观看视频 P13:深度学习介绍和反向传播机制(2天)深度学习步骤神经网络——矩阵计算模型评估选择最优函数梯度下降反向传播反向传播过程Forward passBackward pass总结深度学习步骤step1 :神经网络(Neural network)Step2:模型评估(Goodness of function)Step3:选择最优函数(Pick best function)神经网
Task04:观看视频 P13:深度学习介绍和反向传播机制(2天)
深度学习
步骤
- step1 :神经网络(Neural network)
- Step2:模型评估(Goodness of function)
- Step3:选择最优函数(Pick best function)
神经网络——矩阵计算
引入矩阵计算(Matrix Operation)能使得我们的运算的速度以及效率高很多
从结构上看每一层的计算都是一样的,也就是用计算机进行并行矩阵运算。 这样写成矩阵运算的好处是,你可以使用GPU加速。
模型评估
对于模型的评估,我们一般采用损失函数来反应模型的好差
对于损失,我们不单单要计算一笔数据的,而是要计算整体所有训练数据的损失,然后把所有的训练数据的损失都加起来,得到一个总体损失L。接下来就是在function set里面找到一组函数能最小化这个总体损失L,或者是找一组神经网络的参数
θ
\theta
θ,来最小化总体损失L
选择最优函数
梯度下降
具体流程:
θ
\theta
θ是一组包含权重和偏差的参数集合,随机找一个初试值,接下来计算一下每个参数对应偏微分,得到的一个偏微分的集合∇L,就是梯度,有了这些偏微分,我们就可以不断更新梯度得到新的参数,这样不断反复进行,就能得到一组最好的参数使得损失函数的值最小
反向传播
在神经网络中计算损失最好的方法就是反向传播,我们可以用很多框架来进行计算损失,比如说TensorFlow,theano,Pytorch等等
反向传播
反向传播是计算梯度的有效方法
链式法则:
过程
从这一小部分中去看,把计算梯度分成两个部分(链式法则)
- 计算 ∂ z ∂ w \frac{\partial z}{\partial w} ∂w∂z (Forward pass的部分)
- 计算
∂
l
∂
z
\frac{\partial \mathrm{l}}{\partial \mathrm{z}}
∂z∂l (Backward pass的部分)
Forward pass
∂
z
∂
w
1
=
x
1
∂
z
∂
w
2
=
x
2
\begin{aligned} &\frac{\partial \mathrm{z}}{\partial \mathrm{w} 1}=\mathrm{x}_{1} \\ &\frac{\partial \mathrm{z}}{\partial \mathrm{w} 2}=\mathrm{x}_{2} \end{aligned}
∂w1∂z=x1∂w2∂z=x2
Backward pass
计算 ∂ l ∂ z \frac{\partial \mathrm{l}}{\partial \mathrm{z}} ∂z∂l ∂ l ∂ z = ∂ a ∂ z ∂ l ∂ a ∂ l ∂ a = ∂ z ′ ∂ a ∂ l ∂ z ′ + ∂ z ′ ′ ∂ a ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z}=\frac{\partial a}{\partial z} \frac{\partial l}{\partial a} \quad \frac{\partial l}{\partial a}=\frac{\partial z^{\prime}}{\partial a} \frac{\partial l}{\partial z^{\prime}}+\frac{\partial z^{\prime \prime}}{\partial a} \frac{\partial l}{\partial z^{\prime \prime}} ∂z∂l=∂z∂a∂a∂l∂a∂l=∂a∂z′∂z′∂l+∂a∂z′′∂z′′∂l
但是你可以想象从另外一个角度看这个事情, 现在有另外一个神经元, 把forward的过程逆向过来,其中
σ
′
(
z
)
\sigma^{\prime}(\mathrm{z})
σ′(z) 是常数, 因为它在向前传播的时候就已经确定了
然后一直递归下去算
但是我们可以从最后往前算,我们可以从最后一个 ∂ l ∂ z 5 \frac{\partial \mathrm{l}}{\partial z_{5}} ∂z5∂l 和 ∂ l ∂ z 6 \frac{\partial \mathrm{l}}{\partial z_{6}} ∂z6∂l 看, 因为 ∂ l ∂ z a \frac{\partial \mathrm{l}}{\partial z_{\mathrm{a}}} ∂za∂l 和 ∂ l ∂ z b \frac{\partial \mathrm{l}}{\partial z_{\mathrm{b}}} ∂zb∂l 比较容易通过output求出来, 然后继续往前求 ∂ l ∂ z 3 \frac{\partial \mathrm{l}}{\partial \mathrm{z}_{3}} ∂z3∂l 和 ∂ l ∂ z 4 \frac{\partial \mathrm{l}}{\partial \mathrm{z}_{4}} ∂z4∂l, 再继续求 ∂ l ∂ z 1 \frac{\partial \mathrm{l}}{\partial \mathrm{z} 1} ∂z1∂l 和 ∂ l ∂ z 2 \frac{\partial \mathrm{l}}{\partial \mathrm{z} 2} ∂z2∂l 最后我们就得到下图的结果。反向
实际上进行backward pass时候和向前传播的计算量差不多。
假设
∂
1
∂
z
\frac{\partial 1}{\partial z}
∂z∂1 和
∂
1
∂
z
′
′
\frac{\partial 1}{\partial z^{\prime \prime}}
∂z′′∂1 是最后一层的隐藏层 也就是就是
y
1
y 1
y1 与
y
2
y 2
y2 是输出值, 那么直接计算就能得出结果
总结
我们的目标是要求计算
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z (Forward pass的部分) 和计算
∂
1
∂
z
\frac{\partial 1}{\partial z}
∂z∂1 ( Backward pass的部分), 然后把
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z 和
∂
1
∂
z
\frac{\partial 1}{\partial z}
∂z∂1 相乘, 我们就可以得到
∂
1
∂
w
\frac{\partial 1}{\partial w}
∂w∂1,进而得到神经网络中所有的参数,然后用梯度下降就可以不断更新,得到损失最小的函数
更多推荐
所有评论(0)