文章目录
神经网络:表达(Neural Networks: Representation)
1.非线性假设(Non-linear Hypotheses)
在week1中假设函数拟合屋价格的时候,猜想使用多项式函数(泰勒级数)能拟合任意形状的曲线。那为什么还需要介绍神经网络呢?
如下图课程举例说明了这种情况:在计算机视觉中识别汽车,是识别照片里面像素矩阵的特征。选取汽车照片里一个车门把手像素(50*50)的灰度照片(灰度值表示色彩的强烈程度),选择每个像素点作为特征,则特征的总量是
n
=
2500
n=2500
n=2500(如果换成RGB(一个像素有三个值),那么
n
=
7500
n=7500
n=7500),如果选取将其两两组合作为新特征,则总的特征数为
C
2500
2
≈
3
∗
1
0
7
C_{2500}^2\thickapprox3*10^7
C25002≈3∗107
从 这里看出,实际问题中特征量会非常多,如果再构造高阶多项式那么特征数量会急剧增加,这会使得回归模型的复杂度很高,计算量很大。但是再看神经网络无需构造高阶多项式,在特征量很大的时候处理效果很好。
2.神经网络和大脑(Neurons and the Brain)
脑科学家通过对动物实验,发现大脑中专用于处理听觉信号的脑皮层也能处理其他诸如视觉等信号,即如果切断其与耳朵的联系,将其与眼睛相连,则这块负责听觉的脑皮层区域也能接受并处理视觉信号,从而学会“看”。脑科学家通过这类换源实验,就推论假设大脑的学习算法只有一种(“one learning algorithm” hypothesis)。那么如果能找出这种学习算法并应用于计算机中,那梦想中和人一样的人工智能就成真了。
神经网络就源于模拟人类大脑,但其需要的计算量很大。随着计算机硬件性能的提高,神经网络逐渐从衰落变为流行,如今已广泛地被应用在各行各业中。
3.模型表示1(Model Representation I)
大脑神经元的结构:
细胞核(nucleus) 轴突(axon) 树突(dendrite)
树突对应输入(input),细胞核对应激活单元(activation unit),轴突对应输出(output)
我们一般把神经网络划分为三部分(注意,不是只有三层,隐藏层可能有多层),即输入层(input layer),隐藏层(hidden layer)和输出层(output layer)。
图中每个圈表示一个神经网络中的一个激活单元,输入层对应输入单元,输出层对应输出单元。中间激活单元应用激活函数(sigmoid activation function和逻辑回归中的
g
(
z
)
=
1
1
+
e
−
θ
T
x
g(z)=\frac{1}{1+e^{-\theta^Tx}}
g(z)=1+e−θTx1函数一样)处理数据。
表示神经网络时的一些符号:
x 0 x_0 x0:偏置单元(bias unit), x 0 = 1 x_0=1 x0=1
Θ \Theta Θ:权重(weight),矩阵形式的参数
激活函数: g g g,即逻辑函数等
输入层:对应于训练集中的特征 x x x
输出层:对应于训练集中的结果 y y y
a i ( j ) a_i^{(j)} ai(j):表示第 j j j层的第 i i i个单元
Θ ( j ) \Theta^{(j)} Θ(j):从第 j j j层映射到第 j + 1 j+1 j+1层的权重矩阵
Θ v , u ( j ) \Theta_{v,u}^{(j)} Θv,u(j):从第 j j j层的第 u u u个单元映射到第 j + 1 j+1 j+1层的第 v v v个单元的权重
s j s_j sj:第 j j j层激活单元的个数(不包含偏置单元)
Tips:
- 每个单元会作用于下一层的所有单元
- 权重矩阵大小的计算,如果第 j j j层有 s j s_j sj个单元,第 j + 1 j+1 j+1层有 s j + 1 s_{j+1} sj+1个单元, Θ ( j ) \Theta^{(j)} Θ(j)是一个 s j + 1 × ( s j + 1 ) s_{j+1}\times (s_j+1) sj+1×(sj+1)的矩阵。其中, + 1 +1 +1来自于偏置单元,这样意味着输出层不包含偏置单元,输入层和隐藏层需要增加偏置单元。
4.模型表示2(Model Representation II)
对于输入层(layer1)中的所有激活单元应用激活函数,从而得到隐藏层(layer2)中的激活单元的值:
a
1
(
2
)
,
a
2
(
2
)
a
3
(
2
)
a_1^{(2)},a_2^{(2)}a_3^{(2)}
a1(2),a2(2)a3(2)如下图所示
对于layer2层的激活单元使用激活函数,从而得到输出:
h
Θ
(
x
)
=
a
1
(
3
)
=
g
(
Θ
10
(
2
)
a
0
(
2
)
+
Θ
11
(
2
)
a
1
(
2
)
+
Θ
12
(
2
)
a
2
(
2
)
+
Θ
13
(
2
)
a
3
(
2
)
)
h_\Theta(x)=a_1^{(3)}=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)=a1(3)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
上面的计算过程被称为前向传播(Forward propagation),即从输入层开始,一层一层地向下计算并传递结果。
对比一下逻辑回归:
h
θ
(
x
)
=
g
(
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
)
h_\theta(x)=g(\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3)
hθ(x)=g(θ0+θ1x1+θ2x2+θ3x3)
表示符号不同,但是函数结构完全一样,在神经网络中输入变成了
a
1
(
j
)
,
a
2
(
j
)
,
.
.
.
,
a
n
(
j
)
a_1^{(j)},a_2^{(j)},...,a_n^{(j)}
a1(j),a2(j),...,an(j),从输入层开始,下一层的每个激活单元都包含了上一层的所有信息,通过最优化的算法不断迭代,激活单元能得出关于输入
x
x
x的更多信息,这就好像是在给假设函数加多项式,隐藏层的这些单元好像升级版的初始特征,从而能给出更好的预测。
向量化的实现
则有
a
(
2
)
=
g
(
Θ
(
1
)
a
(
1
)
)
=
g
(
z
(
2
)
)
a^{(2)}=g(\Theta^{(1)}a^{(1)})=g(z^{(2)})
a(2)=g(Θ(1)a(1))=g(z(2))
z
i
(
j
)
=
Θ
i
,
0
(
j
−
1
)
a
0
(
j
−
1
)
+
Θ
i
,
1
(
j
−
1
)
a
1
(
j
−
1
)
+
.
.
.
+
Θ
i
,
n
(
j
−
1
)
a
n
(
j
−
1
)
z_i^{(j)}=\Theta_{i,0}^{(j-1)}a_0^{(j-1)}+\Theta_{i,1}^{(j-1)}a_1^{(j-1)}+...+\Theta_{i,n}^{(j-1)}a_n^{(j-1)}
zi(j)=Θi,0(j−1)a0(j−1)+Θi,1(j−1)a1(j−1)+...+Θi,n(j−1)an(j−1),
z
(
j
)
=
Θ
(
j
−
1
)
a
(
j
−
1
)
,
a
(
j
)
=
g
(
z
(
j
)
)
z^{(j)}=\Theta^{(j-1)}a^{(j-1)},a^{(j)}=g(z^{(j)})
z(j)=Θ(j−1)a(j−1),a(j)=g(z(j)), 通过该式即可计算神经网络中每一层的值。
预测结果即
h
Θ
(
x
)
=
a
(
3
)
=
g
(
Θ
(
2
)
a
(
2
)
)
=
g
(
z
(
3
)
)
h_\Theta (x)=a^{(3)}=g(\Theta^{(2)}a^{(2)})=g(z^{(3)})
hΘ(x)=a(3)=g(Θ(2)a(2))=g(z(3))
需要注意的是,在表示预测结果的时候需要给隐藏层的最后一层加上偏置单元。
扩展到所有样本实例:
z
(
2
)
=
Θ
(
1
)
X
T
z^{(2)}=\Theta^{(1)}X^T
z(2)=Θ(1)XT
神经网络可有多层,每层的激活单元数量也并不固定:
习惯于将输入层称为神经网络的第 0 层,如上图的神经网络被称为三层网络。
5.例子和直观理解(Examples and Intuitions )
为了更好的理解神经网络,举例单层神经网络进行逻辑运算的例子。
下面的例子中, x 1 , x 2 x_1,x_2 x1,x2为二进制数。
逻辑与(AND)运算(都为真值则结果才为真)神经网络:
Θ
(
1
)
=
[
−
30
20
20
]
\Theta^{(1)}=[-30 \quad 20 \quad 20]
Θ(1)=[−302020],
h
θ
(
x
)
=
g
(
−
30
+
20
x
1
+
20
x
2
)
h_\theta(x)=g(-30+20x_1+20x_2)
hθ(x)=g(−30+20x1+20x2).
回顾 sigmoid 函数图像,根据输入则有上图中右边的表格,即 h θ ( x ) ≈ x 1 h_\theta(x)\approx x_1 hθ(x)≈x1 AND x 2 x_2 x2 。这样就实现了一个能够进行与运算的神经网络。
再举一例,逻辑或(OR)运算(有一个真值则结果就为真)神经网络:
下面逐步构建复杂一点的神经网络:
如下图,我们分别构建了三个单层神经网络,将这三个网络组合起来,可得到一个新的神经网络,其可完成逻辑运算中的异或(XNOR)操作:
这里的组合即为XNOR=
(
x
1
(x_1
(x1 AND
x
2
)
x_2)
x2)OR((NOT
x
1
x_1
x1) AND (NOT
x
2
x_2
x2))
特征值能不断升级,并抽取出更多信息,直到计算出结果。而如此不断组合,我们就可以逐渐构造出越来越复杂、强大的神经网络,比如用于手写识别的神经网络。
6.多类别分类(Multiclass Classification)
之前讨论的都是预测结果为单值情况下的神经网络,要实现多类别分类,其实只要修改一下输出层,让输出层包含多个输出单元即可。
举一个 4 分类问题的实例:
有四种分类情况,那么就让输出层包含 4 个输出单元即可,则
h
Θ
h_{\Theta}
hΘ为 4 维向量。
神经网络中的多分类算法算是对 one-vs-all 思想的扩展,定义预测结果一共有 4 种情况:
总结一下
多分类问题,要分为 K K K类,就在输出层放置 K K K个输出单元,对于单个样本实例,预测向量 h Θ ( x ) h_{\Theta}(x) hΘ(x) 为 K K K维向量,我们则依据这个预测向量,得出该实例属于哪个类 。注意,神经网络中的预测和结果都是 K K K维向量,而不再只是一个实数了。