前言
1.非线性假设(Non-linear Hypotheses)
2.模型表示(Model Representation)
3.向量化(Vectorization)
神经网络表述
(一)非线性假设(Non-linear Hypotheses)
之前我们学习了线性回归和逻辑回归算法,理论上它们可以解决绝大部分的问题了,但是实际上,当我们的特征逐渐变多的时候,用线性回归和逻辑回归来解决问题通常会导致计算的负荷非常大。例如,当我们用逻辑回归来解决问题的时候,假设有100个特征,如果仅构造两两特征的组合
(
x
1
x
2
+
x
1
x
3
+
x
1
x
4
+
.
.
.
+
x
2
x
3
+
x
2
x
4
+
.
.
.
+
x
99
x
100
)
(x_1x_2+x_1x_3+x_1x_4+...+x_2x_3+x_2x_4+...+x_{99}x_{100})
(x1x2+x1x3+x1x4+...+x2x3+x2x4+...+x99x100),就有大约5000个特征了,想要拟合的效果更好,加上三三特征的组合,这时候特征数就有大约170000,用这样庞大的特征量进行拟合,计算量之大可想而知。举个具体的例子,在计算机视觉中,我们实现判断图中是否有小汽车的功能。计算识别图像是通过识别图像的像素来实现的,我们眼中的照片在计算机看来就是一堆数字,计算机通过对数字的分析来判断照片中的内容。假设我们选取照片的这两个地方的像素作为特征输入:
我们根据像素点1和像素点2以及对应的照片是否为小汽车,将它们表现在图上,是小汽车和不是小汽车分开表示:
例如上图,我们继续增加样本的数量至如图所示,我们要做的就是判定出两种数据的边界曲线。
事实上,要想实现该功能,仅依靠两个像素点是不能完成的。假设图片的像素是50x50(像素很低了),如果我们将所有的像素视为特征,则会有 2500个特征,再将特征之间进行两两组合就有大约3百万个特征,这还是图片是灰白的情况,如果是彩色(RGB)的,就会有7500个特征,组合起来就更多了。
总之,之前所学的模型,不能有效地处理这么多的特征,这时候我们需要神经网络。
(二)模型表示(Model Representation)
神经网络模型模拟人的大脑来实现计算功能。人的思考过程依赖于神经元和神经元之间信息的传递和处理。信息从神经元的树突传入,经过细胞体的处理,通过轴突将信息传递给下一个神经元。我们将每一个神经元看作是一个学习模型(也叫激活单元,activation unit),将树突看做输入,将细胞体看做运算处理,将轴突看做输出。
通过这些理解,我们建立一个最简单的神经网络模型(就是只有一个神经元的)。我们将
x
1
,
x
2
,
x
3
x_{1},x_{2},x_{3}
x1,x2,x3作为输入特征输入到神经网络,它们与黄色圆圈之间的连线看作是输入,在黄圆圈里进行运算之后输出给h。
再进一步,黄色圆圈里进行的运算是将输入特征乘以连线上的
θ
\theta
θ值,也就是之前所说的模型参数,有时也称它为权重,得到的结果再通过Sigmoid函数处理即得最后的结果。通常,我们会在输入特征
x
1
,
x
2
,
x
3
x_{1},x_{2},x_{3}
x1,x2,x3之外添加一个
x
0
x_{0}
x0作为偏置项(bias unit)并恒置为1,作用和之前学习中添加
x
0
x_{0}
x0的作用一样。
我们选用的非线性的激活函数时Sigmoid函数,在吴恩达机器学习中也一直选用它作为激活函数,其实除了它,我们还可以选用其他的激活函数,例如tanh,ReLu函数等等。
在此基础之上,我们将神经元组合起来,形成真正意义上的神经网络模型,如图:
从图中可以直观地看到,我们有三个特征
x
1
x_1
x1,
x
2
x_2
x2,
x
3
x_3
x3是输入单元(input units),我们将原始数据输入给它们。
a
1
a_1
a1,
a
2
a_2
a2,
a
3
a_3
a3是中间单元,它们负责将数据进行处理,然后呈递到下一层。 最后是输出单元,它负责计算
h
θ
(
x
)
{h_\theta}\left( x \right)
hθ(x)。我们在第一层和第二层都添加了偏置项。
我们了解一些术语,神经网络的第一层,也就是输入原始数据的这一层,我们称之为输入层(Input layer);最后一层,也就是输出结果的这一层,我们称之为输出层(Output layer);中间的我称之为隐藏层(Hidden layer),因为我们是看不到中间的计算结果的。通常我们不把输入层计入神经网络的层数当中。
我们引入一些标记法来帮助描述模型:
a
i
(
j
)
a_{i}^{\left( j \right)}
ai(j) 代表第
j
j
j 层的第
i
i
i 个激活单元。
θ
(
j
)
{{\theta }^{\left( j \right)}}
θ(j)代表从第
j
j
j 层映射到第
j
+
1
j+1
j+1 层时的权重的矩阵,例如
θ
(
1
)
{{\theta }^{\left( 1 \right)}}
θ(1)代表从第一层映射到第二层的权重的矩阵。其尺寸为:以第
j
+
1
j+1
j+1层的激活单元数量为行数,以第
j
j
j 层的激活单元数加一为列数的矩阵。例如:上图所示的神经网络中
θ
(
1
)
{{\theta }^{\left( 1 \right)}}
θ(1)的尺寸为 3*4。
黄色圆圈的计算可以用下图表示:
即:
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a_{1}^{(2)}=g(\Theta {10}^{(1)}{{x}{0}}+\Theta {11}^{(1)}{{x}{1}}+\Theta {12}^{(1)}{{x}{2}}+\Theta {13}^{(1)}{{x}{3}})
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a
2
(
2
)
=
g
(
Θ
20
(
1
)
x
0
+
Θ
21
(
1
)
x
1
+
Θ
22
(
1
)
x
2
+
Θ
23
(
1
)
x
3
)
a_{2}^{(2)}=g(\Theta {20}^{(1)}{{x}{0}}+\Theta {21}^{(1)}{{x}{1}}+\Theta {22}^{(1)}{{x}{2}}+\Theta {23}^{(1)}{{x}{3}})
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
a_{3}^{(2)}=g(\Theta {30}^{(1)}{{x}{0}}+\Theta {31}^{(1)}{{x}{1}}+\Theta {32}^{(1)}{{x}{2}}+\Theta {33}^{(1)}{{x}{3}})
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h
Θ
(
x
)
=
g
(
Θ
10
(
2
)
a
0
(
2
)
+
Θ
11
(
2
)
a
1
(
2
)
+
Θ
12
(
2
)
a
2
(
2
)
+
Θ
13
(
2
)
a
3
(
2
)
)
{{h}_{\Theta }}(x)=g(\Theta {10}^{(2)}a{0}^{(2)}+\Theta {11}^{(2)}a{1}^{(2)}+\Theta {12}^{(2)}a{2}^{(2)}+\Theta {13}^{(2)}a{3}^{(2)})
hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
计算过程就是我们说的,将输入乘以连线上的模型参数 θ \theta θ的值,再经过激活函数Sigmoid的运算就得到输出,每个神经元的计算过程都是这样的。
(三)向量化(Vectorization)
我们将计算过程copy过来:
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a_{1}^{(2)}=g(\Theta {10}^{(1)}{{x}{0}}+\Theta {11}^{(1)}{{x}{1}}+\Theta {12}^{(1)}{{x}{2}}+\Theta {13}^{(1)}{{x}{3}})
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)
a
2
(
2
)
=
g
(
Θ
20
(
1
)
x
0
+
Θ
21
(
1
)
x
1
+
Θ
22
(
1
)
x
2
+
Θ
23
(
1
)
x
3
)
a_{2}^{(2)}=g(\Theta {20}^{(1)}{{x}{0}}+\Theta {21}^{(1)}{{x}{1}}+\Theta {22}^{(1)}{{x}{2}}+\Theta {23}^{(1)}{{x}{3}})
a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
a_{3}^{(2)}=g(\Theta {30}^{(1)}{{x}{0}}+\Theta {31}^{(1)}{{x}{1}}+\Theta {32}^{(1)}{{x}{2}}+\Theta {33}^{(1)}{{x}{3}})
a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)
h
Θ
(
x
)
=
g
(
Θ
10
(
2
)
a
0
(
2
)
+
Θ
11
(
2
)
a
1
(
2
)
+
Θ
12
(
2
)
a
2
(
2
)
+
Θ
13
(
2
)
a
3
(
2
)
)
{{h}_{\Theta }}(x)=g(\Theta {10}^{(2)}a{0}^{(2)}+\Theta {11}^{(2)}a{1}^{(2)}+\Theta {12}^{(2)}a{2}^{(2)}+\Theta {13}^{(2)}a{3}^{(2)})
hΘ(x)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
我们一步一步地实现向量化的过程。
首先,我们令
a
(
2
)
=
g
(
z
(
2
)
)
{{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}})
a(2)=g(z(2)),即将激活函数中的内容用
z
(
2
)
{{z}^{\left( 2 \right)}}
z(2)代替,也就是将括号里的内容分别用
z
1
(
2
)
,
z
2
(
2
)
,
z
3
(
2
)
z_{1}^{(2)},z_{2}^{(2)},z_{3}^{(2)}
z1(2),z2(2),z3(2)表示,具体如图所示:
由此我们得到了第一步向量化的结果:
我们令
z
(
2
)
=
θ
(
1
)
x
{{z}^{\left( 2 \right)}}={{\theta }^{\left( 1 \right)}}x
z(2)=θ(1)x,则
a
(
2
)
=
g
(
z
(
2
)
)
{{a}^{\left( 2 \right)}}=g({{z}^{\left( 2 \right)}})
a(2)=g(z(2)) ,计算后添加
a
0
(
2
)
=
1
a_{0}^{\left( 2 \right)}=1
a0(2)=1。 计算输出的值为:
总的过程可以表示如下: