机器学习笔记(2)

反向传播法(Backpropagation algorithm)

  使用梯度下降法求解价值函数j(x)的最小值时,我们需要知道j(x)的导数

  先给一个样本(x,y)时的正向传播过程

图片发自App

    a(1) = x

    z(2) = theta(1)a(1)

    a(2) = g(z(2))

    z(3) = theta(2)a(2)

    a(3) = g(z(3))

    z(4) = theta(3)a(3)

    a(4) = h(x) = g(z(4))

    设置∂_j^l 为第l成j节点的误差

    δ(4)=a(4)−yδ(4)=a(4)−y

    δ(3)=(θ(3))Tδ(4).∗g′(z(3))δ(3)=(θ(3))Tδ(4).∗g′(z(3))

    δ(2)=(θ(2))Tδ(3).∗g′(z(2))δ(2)=(θ(2))Tδ(3).∗g′(z(2))

    算法步骤如下

 

图片发自App

 

function [jVal, gradient] = costFunction(theta)

Optheta = fminunc(@costFunction, initialTheta, options)

在上面的函数中,我们需要传递的参数为向量,但在以前的课程中可以发现这些参数都为矩阵形式,所以我们需要把矩阵换为向量传递,在函数中将向量转换为矩阵使用。

下面举一个例子

S1 = 10,S2 = 10,S3 = 1

Theta(1)=R(10×11,) , theta(2)=R(10×11),theta(3)=R(1×11)

D(1)=R(10×11),D(2)=R(10×11),D(3)=R(1×11)

梯度下降检测法

因为梯度计算方式的复杂,下面给出一种检测计算的方式

我们学习过倒数的几何意义如下

图片发自App


由此我们可以想到一种检测梯度的方式

相对应的代码形式为

图片发自App


但在运行代码的时候需要把梯度下降检测算法的代码给删去,因为它的作用只是为了检测反向传播算法的正确性,如果证明了正确,就不必再用了,如果使用会让神经网络计算的很慢。

随意初始值

在调用梯度下降发河先进的优化算法时,我们需要给出初始值,我们不能和以前一样把初始值都设置为0,因为根据正向传播算法,如果初始值都一样,则每层的单元之a(l)会想通,同样,根据反向传播算法,每个δ(l)会相同。如此一来,。诶次更新后,输入到每层的各个单元值相同。

采用随机初始化的代码如下

图片发自App


且初始化theta(l)的范围为[−ε,+ε]. (ε的值通常很小,约为0.001)

你可能感兴趣的:(机器学习笔记(2))