神经网络——模型
摘要
本周主要介绍了神经网络的模型,只学习模型表示,需要好好熟悉才能避免后面看不懂。练习中对其加以实现。
练习实现了上周未实现的多分类问题,实例为手写数字识别,效率是个问题,所以会对效率加以讨论。
神经网络模型
动机
看起来逻辑回归已经足够解决所有分类问题。但是,像在练习中处理图像,特征真的太多,所以训练效率极其低,可以参考下一节对多分类逻辑回归效率的思考。所以神经网络分层的结构可以解决这个问题,当然,神经网络不只是为了优化逻辑分类而存在。
模型表示
细节太多,很难说清楚,还是需要系统的学习。但其实只要熟悉几次,基本就不会觉得晕,本质上,只是下面一张图。
对里面提到的变量,写法,以及各层θ的大小,要很熟悉才行,确实挺多东西,但并不难。
定义
= “activation” of unit i in layer j
= matrix of weights controlling function mapping from layer j to layer j+1
以下是每一层的详细公式
小结——关于神经网络模型的思考
神经网络模型,应该就是一个分层进行训练,极大降低训练量的分层模型,每一个神经元都是一条公式,每一条边是一个权重仅此而已。注意,这里说的是模型表示本身。其实还有诸多大问题,比如,现在能想到的,参数怎么训练?怎么用损失函数反馈,用什么损失函数?这些才是这个模型的关键。
模型表示本身就是感知机——另一个形式的函数。请看使用神经网络完成的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