深度学习
概念:
一类通过多层非线性变换对高复杂性数据建模算法的集合。
特性:
1、多层
2、非线性
线性模型的局限性
线性模型中,模型的输出为输入的加权和。
例如:
y
=
∑
i
w
i
x
i
+
b
y=\sum_{i}w_ix_i+b
y=i∑wixi+b
其中
w
i
,
b
∈
R
w_i,b \in R
wi,b∈R为模型的参数。
特点
任意线性模型的组合还是线性模型。
局限性
只通过线性变换,任意层的全连接神经网络和单层神经网络模型的表达能力没有任何区别,并且都是线性模型。
线性模型能解决的问题是有限的。
在线性可分问题中,线性模型就能很好的区分不同颜色的点。而上图无法通过直线(或高维空间的平面)划分。
在现实世界中,绝大部分的问题都是无法线性分割的。
激活函数实现去线性化
如果将每一个神经元(即神经网络的节点)的输出通过一个非线性函数,则整个神经网络的模型就不再是线性的了。
下面将【TensorFlow 学习】如何实现一个简单的神经网络中的神经网络结构加上激活函数和偏置项后实现的前向传播算法为:
A
1
=
[
a
11
,
a
12
,
a
13
]
=
f
(
x
W
(
1
)
+
b
)
=
f
(
[
x
1
,
x
2
]
[
W
1
,
1
(
1
)
W
1
,
2
(
1
)
W
1
,
3
(
1
)
W
2
,
1
(
1
)
W
2
,
2
(
1
)
W
2
,
3
(
1
)
]
+
[
b
1
,
b
2
,
b
3
]
)
=
f
(
[
W
1
,
1
(
1
)
x
1
+
W
2
,
1
(
1
)
x
2
+
b
1
,
W
1
,
2
(
1
)
x
1
+
W
2
,
2
(
1
)
x
2
+
b
2
,
W
1
,
3
(
1
)
x
1
+
W
2
,
3
(
1
)
x
2
+
b
3
]
)
=
[
f
(
[
W
1
,
1
(
1
)
x
1
+
W
2
,
1
(
1
)
x
2
+
b
1
)
,
f
(
W
1
,
2
(
1
)
x
1
+
W
2
,
2
(
1
)
x
2
+
b
2
)
,
f
(
W
1
,
3
(
1
)
x
1
+
W
2
,
3
(
1
)
x
2
+
b
3
)
]
A_1=[a_{11},a_{12},a_{13}]=f(xW^{(1)}+b)=f([x_1,x_2] \left[ \begin{matrix} W^{(1)}_{1,1} & W^{(1)}_{1,2} & W^{(1)}_{1,3} \\ W^{(1)}_{2,1} & W^{(1)}_{2,2} & W^{(1)}_{2,3} \end{matrix} \right]+[b_1,b_2,b_3]) \\ =f([W^{(1)}_{1,1}x_1+W^{(1)}_{2,1}x_2+b1,W^{(1)}_{1,2}x_1+W^{(1)}_{2,2}x_2+b2,W^{(1)}_{1,3}x_1+W^{(1)}_{2,3}x_2+b3])\\ =[f([W^{(1)}_{1,1}x_1+W^{(1)}_{2,1}x_2+b1),f(W^{(1)}_{1,2}x_1+W^{(1)}_{2,2}x_2+b2),f(W^{(1)}_{1,3}x_1+W^{(1)}_{2,3}x_2+b3)]
A1=[a11,a12,a13]=f(xW(1)+b)=f([x1,x2][W1,1(1)W2,1(1)W1,2(1)W2,2(1)W1,3(1)W2,3(1)]+[b1,b2,b3])=f([W1,1(1)x1+W2,1(1)x2+b1,W1,2(1)x1+W2,2(1)x2+b2,W1,3(1)x1+W2,3(1)x2+b3])=[f([W1,1(1)x1+W2,1(1)x2+b1),f(W1,2(1)x1+W2,2(1)x2+b2),f(W1,3(1)x1+W2,3(1)x2+b3)]
上面的定义主要有两个改变:
1、新的公式中增加了偏置项(bias),偏置项是神经网络中非常常用的一种结构。
2、每个节点的取值不再是单纯的加权和。每个节点的输出在加权和的基础上还做了一个非线性变化。
常用的非线性激活函数的函数
下图显示了几种常用的非线性激活函数的函数图像:
通过这些激活函数,每一个节点不再是线性变化,因此整个神经网络模型也不再是线性的了。
加入偏置项及 ReLU 激活函数后,【TensorFlow 学习】如何实现一个简单的神经网络中神经网络的结构如下:
偏置项可以被表达为一个输出永远为 1 的节点。
新的神经网络前向传播算法的计算方法:
a
11
=
f
(
W
1
,
1
(
1
)
x
1
+
W
2
,
1
(
1
)
x
2
+
b
1
(
1
)
)
=
f
(
0.7
×
0.2
)
a
12
=
f
(
W
1
,
2
(
1
)
x
1
+
W
2
,
2
(
1
)
x
2
+
b
1
(
2
)
a
13
=
f
(
W
1
,
3
(
1
)
x
1
+
W
2
,
3
(
1
)
x
2
+
b
1
(
3
)
)
\begin{aligned} a_{11} &=f(W_{1,1}^{(1)}x_1+W_{2,1}^{(1)}x_2+b_1^{(1)})=f(0.7 \times 0.2)\\ a_{12} &=f(W_{1,2}^{(1)}x_1+W_{2,2}^{(1)}x_2+b_1^{(2)}\\ a_{13}&=f(W_{1,3}^{(1)}x_1+W_{2,3}^{(1)}x_2+b_1^{(3)}) \end{aligned}
a11a12a13=f(W1,1(1)x1+W2,1(1)x2+b1(1))=f(0.7×0.2)=f(W1,2(1)x1+W2,2(1)x2+b1(2)=f(W1,3(1)x1+W2,3(1)x2+b1(3))
输出层推导公式:
Y
=
f
(
W
(
1
,
1
)
(
2
)
a
11
+
W
(
1
,
2
)
(
2
)
a
12
+
W
(
1
,
3
)
(
2
)
a
13
+
b
1
(
2
)
)
=
f
(
0.09
×
0.6
+
0.28
×
0.1
+
0.36
×
(
−
0.2
)
+
0.1
)
=
f
(
0.054
+
0.028
+
(
−
0.072
)
+
0.1
)
=
f
(
0.11
)
=
0.11
\begin{aligned} Y &= f(W_{(1,1)}^{(2)}a_{11}+W_{(1,2)}^{(2)}a_{12}+W_{(1,3)}^{(2)}a_{13}+b_1^{(2)})\\ &= f(0.09\times0.6+0.28\times0.1+0.36\times(-0.2)+0.1)\\ &= f(0.054+0.028+(-0.072)+0.1)\\ &=f(0.11)=0.11 \end{aligned}
Y=f(W(1,1)(2)a11+W(1,2)(2)a12+W(1,3)(2)a13+b1(2))=f(0.09×0.6+0.28×0.1+0.36×(−0.2)+0.1)=f(0.054+0.028+(−0.072)+0.1)=f(0.11)=0.11
如何通过 TensorFlow 实现加入偏置项和激活函数的神经网络的前向传播算法?
a = tf.nn.relu(tf.matmul(x, w1) + biases1)
y = tf.nn.relu(tf.matmul(a, w2) + biases2)
多层网络的多层变换
目的: 解决异或运算