1.前言
深度神经网络的架构如上图,这里是一个网页版的在线绘图工具,是比较实用【传送门】
下面,文章将一步一步解密神秘的神经网络
2.数据
2.1 常见的神经网络数据集
2.1.1 MNIST手写数字数据集
下载网址:http://yann.lecun.com/exdb/mnist/index.html
2.1.2 CIFAR-10,CIFAR-100
【传送门】
以MNIST数据集为例,它是最常见的图像数据,有28*28=784个像素点组成。比如这样:
2.2 数据说明
用0表示全白,1表示全黑,其余值介于[0,1]之间。
- 第一层的数据输入:784维的向量
- 最后一层的输出:0-9的10个类别数据
- 隐藏层:暂定
3.目标
建议一个基于神经网络的分类模型,通过识别图片,判断数字是几。
假设我们建立的神经网络如下:
4.正向传播
正向传播,顾名思义就是从输入端计算到输出端。
下面我们手算神经网路
X
=
[
0.1
,
0.2
,
0.4
]
,
y
=
1
X=[0.1,0.2,0.4],y=1
X=[0.1,0.2,0.4],y=1
手算的正向传播。Z是输入激活与权重想成并相加的结果, 预测值y是Z与权重的积。通常要计算的任何输出,都需要激活与权重相乘。
y
p
r
e
d
i
c
t
=
x
1
∗
w
1
+
x
2
∗
w
2
+
x
3
∗
w
3
y_{predict} = x_1*w_1+x_2*w_2+x_3*w_3
ypredict=x1∗w1+x2∗w2+x3∗w3
5.BIAS偏置
偏置实际上是对神经元激活状态的控制。
y
p
r
e
d
i
c
t
=
Σ
i
=
1
n
x
i
∗
w
i
+
b
y_{predict}= \Sigma^{n}_{i=1}x_i*w_i+b
ypredict=Σi=1nxi∗wi+b
6.激活函数
6.1 常见的激活函数
6.1.1 Sigmoid函数
6.1.2 Tanh函数
6.1.3 ReLU函数
6.2 功能
加如激活函数,使得原来的线性组合模型,在非线性激活函数的作用下,可以逼近任何一个函数。
7.计算损失
损失就是真实值与预测值之间的误差,结合4.1计算的结果,我们计算误差为:
l
o
s
s
=
1
−
0.7
=
0.3
loss=1-0.7=0.3
loss=1−0.7=0.3
7.1 常见的误差形式
7.1.1 绝对误差
l
o
s
s
=
∣
y
t
r
u
e
−
y
p
r
e
d
i
c
t
∣
loss=|y_{true}-y_{predict}|
loss=∣ytrue−ypredict∣
不加绝对值,误差会因为有正有负而抵消一部分。
7.1.2 平均值误差
l
o
s
s
=
1
N
Σ
(
y
t
r
u
e
−
y
p
r
e
d
i
c
t
)
2
loss=\frac{1}{N} \Sigma(y_{true}-y_{predict})^{2}
loss=N1Σ(ytrue−ypredict)2
加平方的原因也如此。
8.反向传播
正向传播反着算!!!
因为我们虽然无法改变输入,但是我们可以调整权重。反向传播的目的,就是通过改变权重值,从而使得获得更小的误差,逐渐的趋近真实值。
9.梯度下降
就是求导,求最小值。
这里的最小值,就是使得损失最小。梯度下降的解释,请参照我以前的博客,不做过多的介绍和解释。
10.学习率
古有俗语:还没学会趴,你就要假装飞!
神经网络的学习率也是如此,当我们的模型开始进行迭代的时候,在确切的说是在梯度下降的时候,每一次迭代【增加、减少】多少的权重????
学习率过快过慢都会对模型产生影响。
11.权重调整
w e i g h t n e w = w e i g h t o l d − η ∗ ∇ l ∇ w e i g h t o l d weight_{new}=weight_{old}-\eta* \frac{\nabla l}{\nabla weight_{old}} weightnew=weightold−η∗∇weightold∇l
12.DROP OUT
为了便面模型的过拟合,使用drop out 层。一句话讲:每次计算不比全部运用这些神经元,随机的选取神经元来迭代计算,从而解决模型的过拟合!!