神经网络

神经网络-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.梯度检测:

   为了确保反向传播结果的正确性,运行该方法求代价函数偏导的近似值,与反向传播结果比对,不过运行比较慢,只用来检测

   偏导的近似值:

    

    ϵ取很小的值,比如ϵ=104

    实现方法

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

 

posted @ 2016-08-18 18:38  cherry_yue  阅读(275)  评论(0)    收藏  举报