第一阶段学习了
Linear Regression
,Logistics Regression
,Neural Network Learning
这三块内容,回味总结一下…
1. Linear Regression
这是最简单的东西了,数学原理简单,就是最小二乘法,一般
costFunction
都是凸(convex
)函数,不需要改变costFunction
的形式
![]()
参数Theta
的更新可以用梯度下降法
和直接解矩阵方程
注意同时更新
就好.
![]()
在选择学习速率参数Alpha
的时候,可以通过画出costFunction
关于迭代次数的函数,只要一直是下降的,就可以适当加大Alpha
,调到临界值前,就可以最快的收敛
了。
2. Logistics Regression
逻辑回归一个重要的函数
Sigmoid
函数:
![]()
之所以选择这个函数是因为它有数学上的方便(mathematical convenience
), 具有一些不变性,导数求起来方便:
![]()
与Linear Regression
相比,Logistics Regression
的特别之处就是假设函数
(Hypothesis
)改变了:
![]()
因此它不是线性的,这导致costFunction
也就不能再直接用Linear Regression
的了。因为此时的costFunction
是非凸(Non-convex
)函数, 用梯度下降法不能找到全局最小点(global minimum)
,只能是找到局部最小点(local minimum)
,因此需要改变costFunction
的形式:
![]()
梯度为:
![]()
这里梯度与Linear Regression
的梯度形式一致,只是其中的假设函数
(Hypothesis
)改变了内容。
再一个要注意的是正则化逻辑回归(Regularized logistic regression)
, 防止过拟合(Over-fitting)
![]()
正则化适当
![]()
未正则化(Lambda = 0)
![]()
正则化过渡(Lambda 太大)
3. Neural Network Learning
关于神经网络这一块,感觉细节方面理解的还不够,数学理论基础理解了但是在操作上感觉不够强。
要总结神经网络,首先是网络架构:
![]()
架构上考虑的东西比较多,特别是Hidden Layer
的选择, 层数,节点个数,总之要考虑的诸多,还在学习怎么针对性的选择合适的网络架构。
因为选择了sigmoid
函数作为激励函数(Activation Function)
,所以神经网络的costFunction
类似逻辑回归:
![]()
正则化之后(400,25,10为各层的节点个数):
![]()
Backpropagation
,反向误差传播:
![]()
![]()
![]()
在数学理论上明白Backpropagation
,但是操作中还是有点疑惑,继续学习中。
Gradient checking
(检验梯度是否正确):
![]()
检验正确后要关闭检验,因为计算耗费大量时间,这也是为什么用Backpropagation
的原因吧!