神经网络——模型
摘要
本周主要介绍了神经网络的模型,只学习模型表示,需要好好熟悉才能避免后面看不懂。练习中对其加以实现。
练习实现了上周未实现的多分类问题,实例为手写数字识别,效率是个问题,所以会对效率加以讨论。
神经网络模型
动机
看起来逻辑回归已经足够解决所有分类问题。但是,像在练习中处理图像,特征真的太多,所以训练效率极其低,可以参考下一节对多分类逻辑回归效率的思考。所以神经网络分层的结构可以解决这个问题,当然,神经网络不只是为了优化逻辑分类而存在。
模型表示
细节太多,很难说清楚,还是需要系统的学习。但其实只要熟悉几次,基本就不会觉得晕,本质上,只是下面一张图。
对里面提到的变量,写法,以及各层θ的大小,要很熟悉才行,确实挺多东西,但并不难。
定义
a i ( j ) a_{i}^{(j)} ai(j) = “activation” of unit i in layer j
Θ ( j ) \Theta^{(j)} Θ(j) = matrix of weights controlling function mapping from layer j to layer j+1
以下是每一层的详细公式
a
1
(
2
)
=
g
(
Θ
10
(
1
)
x
0
+
Θ
11
(
1
)
x
1
+
Θ
12
(
1
)
x
2
+
Θ
13
(
1
)
x
3
)
a
2
(
2
)
=
g
(
Θ
20
(
1
)
x
0
+
Θ
21
(
1
)
x
1
+
Θ
22
(
1
)
x
2
+
Θ
23
(
1
)
x
3
)
a
3
(
2
)
=
g
(
Θ
30
(
1
)
x
0
+
Θ
31
(
1
)
x
1
+
Θ
32
(
1
)
x
2
+
Θ
33
(
1
)
x
3
)
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
)
)
\begin{array}{r}{a_{1}^{(2)}=g\left(\Theta_{10}^{(1)} x_{0}+\Theta_{11}^{(1)} x_{1}+\Theta_{12}^{(1)} x_{2}+\Theta_{13}^{(1)} x_{3}\right)} \\ {a_{2}^{(2)}=g\left(\Theta_{20}^{(1)} x_{0}+\Theta_{21}^{(1)} x_{1}+\Theta_{22}^{(1)} x_{2}+\Theta_{23}^{(1)} x_{3}\right)} \\ {a_{3}^{(2)}=g\left(\Theta_{30}^{(1)} x_{0}+\Theta_{31}^{(1)} x_{1}+\Theta_{32}^{(1)} x_{2}+\Theta_{33}^{(1)} x_{3}\right)} \\ {h_{\Theta}(x)=a_{1}^{(3)}=g\left(\Theta_{10}^{(2)} a_{0}^{(2)}+\Theta_{11}^{(2)} a_{1}^{(2)}+\Theta_{12}^{(2)} a_{2}^{(2)}+\Theta_{13}^{(2)} a_{3}^{(2)}\right)}\end{array}
a1(2)=g(Θ10(1)x0+Θ11(1)x1+Θ12(1)x2+Θ13(1)x3)a2(2)=g(Θ20(1)x0+Θ21(1)x1+Θ22(1)x2+Θ23(1)x3)a3(2)=g(Θ30(1)x0+Θ31(1)x1+Θ32(1)x2+Θ33(1)x3)hΘ(x)=a1(3)=g(Θ10(2)a0(2)+Θ11(2)a1(2)+Θ12(2)a2(2)+Θ13(2)a3(2))
小结——关于神经网络模型的思考
神经网络模型,应该就是一个分层进行训练,极大降低训练量的分层模型,每一个神经元都是一条公式,每一条边是一个权重仅此而已。注意,这里说的是模型表示本身。其实还有诸多大问题,比如,现在能想到的,参数怎么训练?怎么用损失函数反馈,用什么损失函数?这些才是这个模型的关键。
模型表示本身就是感知机——另一个形式的函数。请看使用神经网络完成的NOR机。太复杂的话,其实只看第一个就可以,h = 20 * x1 + 20 * x2 - 30,结果就是,只有x1,x2同时为一,输出才是正数,经过sigmoid才会等于1。所以这个是AND机。
多分类逻辑回归效率思考
练习中,用逻辑回归进行多分类训练,做的是手写数字,每个数字是20 x 20 象数,也就是400个特征,所以数据为5000 x 400,共有5000个数据。
逻辑回归运行时,对于每个分类,每个数字,大概需要400 x 50 x 400 x 5000 ——400个参数进行梯度下降,迭代50次,每次梯度下降都需要带入求和400 x 5000个数据。大概就是这样,和特征数量N成平方增长。
上面可能不是很直观,仔细想一下,400个未知数的方程求解系数,是非常恐怖的。所以我突然叶觉得梯度下降真的强。
练习
- 矩阵化上周的逻辑回归
- 利用上面程序,进行多分类实现,包括多分类模型训练和多分类预测,效率问题值得思考
- 神经网络模型实现,只实现模型,提供训练完成的参数。
代码参考github https://github.com/KDL-in/MachineLearningOnCoursera