神经网络
神经网络-representation
1.在参数很多时,非线性假说有弊端。
eg:
假设有3个特征值,含所有二次项的h为h=(θ0+θ1*x1^2+θ2*x1x2+θ3*x1x3+θ4*x2^2+θ5*x2x3+θ6*x3^2)
假设有n个特征值,若h含所有二次项,那么h的项数可近似为Ο(n^2 /2)
假设有n个特征值,若h含所有三次项,那么h的项数可近似为Ο(n^3)
由此可见,若n很大,项数会太多变得复杂,由此引入神经网络,它借鉴一部分生物学理论,神经可塑性(neuroplasticity)
2.模型
- 输入:(x1,x2...xn),加上一个x0=1 (bias unit)
- 逻辑函数:和归类中的一样,在这里也称为sigmoid (logistic) activation function
(参数theta在这里称为权重)
- 简化形式:
输入层 隐藏层 输出层
层1 层2 层3
将隐藏层的结点标为a1,a2...an,称作活化单元(activation units),那么:
设标号如下:
其中Θ(j)是第j层的权值矩阵,它的维度如下:
中间层的a便是这样求得的:
( 这个theta矩阵为Θ(2) )
我们最终要求的h(x)为:
3.向量化实现:
-
:表示g()函数内部的变量
eg:
第二层的结点k便为:
- x,z(j)向量表示:
令x=a(1),则:
(j>=2)
再给a(j)加上bias unit =1,那么就可以求下一个z向量:
如此不断的求,最终的输出只有一个值,也就是只有一行,那么最后的结果就是:
4.一些例子:
- 实现逻辑与函数:
图大概如下:
(x0=1)
若令:
那么:
- 用与、或、非或构造非异或(两数相同为1,不同为0):
首先实现与、非或、或需要的参数如下:
图大概如下:
构造权重矩阵如下:
(可以设两个参数代入逻辑公式验算一下,可得出非异或的结果)
将a全都写出来,可得结果:
5.实现多归类问题:
eg:分成4类
那么,=
,依此类推,下标代表属于第几个类
最终的结果的集合为:
最终的h为其中的一个元素
-----------------------------------------------------------------------------------------------------------------------
神经网络-learning
1.cost function:
定义变量:
代价方程:
这里是逻辑回归方程的一般化,回顾逻辑回归方程如下:
神经网络的代价方程如下:
(Θ矩阵的列数是该层的结点数,包含了偏置单元,行数是下一层的结点数)
2.反向传播算法:
定义变量:
最后一层的误差为:
误差递推关系为:(还不大清楚怎么来的)
(
)
计算偏导项:
,
算法:
实现:
在利用octave实现时,为了调用fminunc(),需要将矩阵展开,方式如下:
thetaVector = [ Theta1(:); Theta2(:); Theta3(:); ]
deltaVector = [ D1(:); D2(:); D3(:) ]
还原:(Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11)
Theta1 = reshape(thetaVector(1:110),10,11) Theta2 = reshape(thetaVector(111:220),10,11) Theta3 = reshape(thetaVector(221:231),1,11)
3.梯度检测:
为了确保反向传播结果的正确性,运行该方法求代价函数偏导的近似值,与反向传播结果比对,不过运行比较慢,只用来检测
偏导的近似值:
ϵ取很小的值,比如ϵ=10−4
实现方法:
epsilon = 1e-4; for i = 1:n, thetaPlus = theta; thetaPlus(i) += epsilon; thetaMinus = theta; thetaMinus(i) -= epsilon; gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon) end;
最后检验 gradApprox ≈ deltaVector是否相等
4.随机初始化:
将权重全部初始化为0在反向传播时会得到一样的值,所以开始时要把权重随机打乱。
实现如下:(rand(x,y) will initialize a matrix of random real numbers between 0 and 1)
If the dimensions of Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11. Theta1 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON; Theta2 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON; Theta3 = rand(1,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
5.步骤整合:
实现:
for i = 1:m, Perform forward propagation and backpropagation using example (x(i),y(i)) (Get activations a(l) and delta terms d(l) for l = 2,...,L