深度学习

步骤

  • 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} wz (Forward pass的部分)
  • 计算 ∂ l ∂ z \frac{\partial \mathrm{l}}{\partial \mathrm{z}} zl (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} w1z=x1w2z=x2
在这里插入图片描述

Backward pass

计算 ∂ l ∂ z \frac{\partial \mathrm{l}}{\partial \mathrm{z}} zl ∂ 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}} zl=zaalal=azzl+azzl

在这里插入图片描述
但是你可以想象从另外一个角度看这个事情, 现在有另外一个神经元, 把forward的过程逆向过来,其中 σ ′ ( z ) \sigma^{\prime}(\mathrm{z}) σ(z) 是常数, 因为它在向前传播的时候就已经确定了
在这里插入图片描述
然后一直递归下去算

但是我们可以从最后往前算,我们可以从最后一个 ∂ l ∂ z 5 \frac{\partial \mathrm{l}}{\partial z_{5}} z5l ∂ l ∂ z 6 \frac{\partial \mathrm{l}}{\partial z_{6}} z6l 看, 因为 ∂ l ∂ z a \frac{\partial \mathrm{l}}{\partial z_{\mathrm{a}}} zal ∂ l ∂ z b \frac{\partial \mathrm{l}}{\partial z_{\mathrm{b}}} zbl 比较容易通过output求出来, 然后继续往前求 ∂ l ∂ z 3 \frac{\partial \mathrm{l}}{\partial \mathrm{z}_{3}} z3l ∂ l ∂ z 4 \frac{\partial \mathrm{l}}{\partial \mathrm{z}_{4}} z4l, 再继续求 ∂ l ∂ z 1 \frac{\partial \mathrm{l}}{\partial \mathrm{z} 1} z1l ∂ l ∂ z 2 \frac{\partial \mathrm{l}}{\partial \mathrm{z} 2} z2l 最后我们就得到下图的结果。反向

在这里插入图片描述
实际上进行backward pass时候和向前传播的计算量差不多。

假设 ∂ 1 ∂ z \frac{\partial 1}{\partial z} z1 ∂ 1 ∂ z ′ ′ \frac{\partial 1}{\partial z^{\prime \prime}} z1 是最后一层的隐藏层 也就是就是 y 1 y 1 y1 y 2 y 2 y2 是输出值, 那么直接计算就能得出结果
在这里插入图片描述

总结

我们的目标是要求计算 ∂ z ∂ w \frac{\partial z}{\partial w} wz (Forward pass的部分) 和计算 ∂ 1 ∂ z \frac{\partial 1}{\partial z} z1 ( Backward pass的部分), 然后把 ∂ z ∂ w \frac{\partial z}{\partial w} wz ∂ 1 ∂ z \frac{\partial 1}{\partial z} z1 相乘, 我们就可以得到 ∂ 1 ∂ w \frac{\partial 1}{\partial w} w1,进而得到神经网络中所有的参数,然后用梯度下降就可以不断更新,得到损失最小的函数
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐