文章目录
1 概念
这些图片主要是摘选自B站up主3Blue1Brown
创作的深度学习 Deep Learning。摘抄这些up主在mnist数字识别
中对神经网络的complex concepts的visualization或者assumption,是期望获得对神经网络概念更加形象化的认识。
1.2 记号新颖解释
记号 | 解释 |
---|---|
输入值 | 图片可以视为 A 28 × 28 \displaystyle A_{28 \times 28} A28×28灰度值矩阵展开得到 x ⃗ 784 × 1 \vec x_{784\times 1} x784×1 |
weights | 形象表明连接的强弱 |
bias | 形象表明神经元是否更容易被激活 |
lossfunction(costfunction) | 告诉电脑选的参数多糟 |
激活值activation | 神经元视为一个装有激活值的容器 |
1.3 各层含义
-
第一层为灰度图片的输入值灰度矩阵 A 28 × 28 A_{28\times 28} A28×28
-
中间层称为隐含层hidden layers,可先视为黑箱
-
最后一层
softmax
将倒数第二层输入值映射到 ( 0 , 1 ) (0,1) (0,1)之间作为分成十个数字的概率
1.4 各层功能的新颖解释
up主的比较新颖的解释,认为第二层点亮的那些神经元能识别组成9的短边,然后第三层点亮的那些神经元能点亮组成9的更完整的图案,然后最终第四层点亮的神经元能识别一个完整的9。尽管up主最后说这种想法是错误的,但是我觉得这种想法本身很新颖。
2. 前馈神经网络
数据从输入开始,流过中间计算过程,最终到达输出层。
模型的输入和输出两者之间没有反馈。
![img](https://i-blog.csdnimg.cn/blog_migrate/49f65a3f7dd78f87dcb1b95160b4be23.jpeg)
比如这张图输入数据 x T x^T xT流经激励函数,再流到代价函数 J J J,而中间没有向回流反馈
3. BP算法
3.1 单个神经元
![img](https://i-blog.csdnimg.cn/blog_migrate/49f65a3f7dd78f87dcb1b95160b4be23.jpeg)
-
设输入为 x ⃗ = [ x 1 , x 2 , x 3 ] T \vec x=[x_1,x_2,x_3]^T x=[x1,x2,x3]T, y y y为目标值
-
进行前向传播
z = ∑ i = 1 3 w i x i + b = w ⃗ ⋅ x ⃗ + b z=\sum_{i=1}^3w_ix_i+b=\vec w\cdot \vec x+b z=i=1∑3wixi+b=w⋅x+b
a = f ( z ) = 1 1 + e − z a=f(z)=\frac{1}{1+e^{-z}} a=f(z)=1+e−z1
J ( w , b , x , y ) = 1 2 ∥ ( a − y ) ∥ 2 J(w,b,x,y)=\frac{1}{2}\Vert (a-y)\Vert^2 J(w,b,x,y)=21∥(a−y)∥2
- 进行反向传播
∂ J ∂ a = − ( y − a ) \frac{\partial J}{\partial a}=-(y-a) ∂a∂J=−(y−a)
∂ J ∂ z = ∂ J ∂ a ∂ a ∂ z = ∂ J ∂ a ∗ ( a ( 1 − a ) ) \frac{\partial J}{\partial z}=\frac{\partial J}{\partial a}\frac{\partial a}{\partial z}=\frac{\partial J}{\partial a}*(a(1-a)) ∂z∂J=∂a∂J∂z∂a=∂a∂J∗(a(1−a))
∂ J ∂ w = ∂ J ∂ z ∂ z ∂ w = ∂ J ∂ z x T \frac{\partial J}{\partial w}=\frac{\partial J}{\partial z}\frac{\partial z}{\partial w}=\frac{\partial J}{\partial z}x^T ∂w∂J=∂z∂J∂w∂z=∂z∂JxT
∂ J ∂ b = ∂ J ∂ z ∂ z ∂ b = ∂ J ∂ z \frac{\partial J}{\partial b}=\frac{\partial J}{\partial z}\frac{\partial z}{\partial b}=\frac{\partial J}{\partial z} ∂b∂J=∂z∂J∂b∂z=∂z∂J
从代价函数开始,从输出到输入,求各节点的偏导,在这个过程中 先后求出 ∂ J ∂ a 、 ∂ J ∂ z 、 ∂ J ∂ w 、 ∂ J ∂ b \frac{\partial J}{\partial a}、\frac{\partial J}{\partial z}、\frac{\partial J}{\partial w}、\frac{\partial J}{\partial b} ∂a∂J、∂z∂J、∂w∂J、∂b∂J
- 然后利用梯度下降法更新w,b
w = w − λ ∂ J ∂ w w=w-\lambda \frac{\partial J}{\partial w} w=w−λ∂w∂J
b = b − λ ∂ J ∂ b b=b-\lambda\frac{\partial J}{\partial b} b=b−λ∂b∂J
- 然后再重复进行前向算法查看 J ( w , b , x , y ) J(w,b,x,y) J(w,b,x,y)是否达到要求或者达到迭代步数
3.2 多层神经网络
![img](https://i-blog.csdnimg.cn/blog_migrate/4b363e9573ee07ed8d1ef26b3b355b71.jpeg)
设 θ ⃗ = [ w 0 , w 1 , w 2 , ⋯ , w m , b 0 , b 1 , ⋯ , b n ] T \vec \theta=[w_0,w_1,w_2,\cdots,w_{m},b_0,b_1,\cdots,b_n]^T θ=[w0,w1,w2,⋯,wm,b0,b1,⋯,bn]T
和上面的单个神经元BP算法类似,通过反向传播获得梯度 ∇ l o s s f u n c t i o n ( θ ⃗ ) \nabla lossfunction(\vec \theta) ∇lossfunction(θ)
更新参数: θ ⃗ = θ ⃗ − λ ∇ l o s s f u n c t i o n ( θ ⃗ ) \vec \theta=\vec \theta-\lambda\nabla lossfunction(\vec \theta) θ=θ−λ∇lossfunction(θ)
最终求得的就是最优的 θ ⃗ \vec \theta θ使得 l o s s f u n c t i o n lossfunction lossfunction最小
4. 模型过程
4.1 回归问题
以 y = w x + b y=wx+b y=wx+b一维线性预测为例
首先初始化w和b
定义模型model: y = f ( w x + b ) y=f(wx+b) y=f(wx+b)经过隐含层求出预测值 y ^ \hat y y^
定义均方误差 l o s s f u n c t i o n = ∑ i = 1 n ( y ^ i − y i ) 2 n \displaystyle lossfunction=\frac{\sum_{i=1}^n(\hat y_i-y_i)^2}{n} lossfunction=n∑i=1n(y^i−yi)2
然后利用梯度下降求出适当的 w , b w,b w,b使得 l o s s f u n c t i o n lossfunction lossfunction达到条件之后退出迭代
再将不在样本中的x带入model就可以得到预测值
4.2 分类问题
以mnist图像识别为例
首先给出一个初始化的w和b
定义模型 model: y = f ( w x + b ) y=f(wx+b) y=f(wx+b)经过隐含层输出然后利用softmax分类器求出预测的概率 p r e d = [ p ( x 1 ) , p ( x 2 ) , ⋯ , p ( x n ) ] pred=[p(x_1),p(x_2),\cdots,p(x_n)] pred=[p(x1),p(x2),⋯,p(xn)]
然后 l o s s f u n c t i o n lossfunction lossfunction为pred和ans的交叉熵
利用梯度下降求得适当的 w , b w,b w,b使得 l o s s f u n c t i o n lossfunction lossfunction到达要求之后退出迭代
最终输出准确率(用 t f . a r g m a x ( p r e d , 1 ) = = t f . a r g m a x ( y , 1 ) tf.argmax(pred,1)==tf.argmax(y,1) tf.argmax(pred,1)==tf.argmax(y,1)来统计在testdata里面分类成功的个数)
再将不在样本中的x带入model就可以得到预测分类