BP神经网络算法:将参数矩阵向量化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cyan_soul/article/details/79955634

上一篇《机器学习:神经网络的代价函数及反向传播算法》记录了如何使用反向传播算法计算代价函数的导数,其中一个细节就是需要把参数的矩阵表达式展开成向量的形式,以便在后来使用高级的优化算法。Ng 老师在讲展开参数(Unrolling Parameters)这部分时,比较粗略。自己补了一下视频里提到的内容,在这里总结记录一下~

基于 Matlab 实现 unrolling parameters,有以下步骤:

function[jVal, gradient] = costFunction(theta)
optTheta = fminunc(@costFunction, initialTheta, options)

其中,fminunc() 是 Matlab 中内置的一个函数,其官方介绍如下:

Find minimum of unconstrained multivariable function
Nonlinear programming solver.
Finds the minimum of a problem specified by minf(x) ,
where f(x) is a function that returns a scalar.
x is a vector or a matrix.

fminunc() 可以用来解决无约束非线性优化问题,帮助我们找到多变量函数的最小值,其中一种形式为:

x = fminunc(fun,x0,options)

那么再回头看 optTheta = fminunc(@costFunction, initialTheta, options) 这个式子,其中第一个输入参数 fun 定义为 @costFunction (@ 是Matlab中的句柄函数的标志符,即间接的函数调用方法);第二个参数定义为 initialTheta,它是一个向量,是需要用户来自定义的,使用前需要初始化;第三个参数 options 是一个结构体,可以通过 optimset 来设置它,包括 GradObj 和 Maxlter 两个参数,GradObj 指明知否使用用户自定义的梯度下降公式,Maxlter 用来设置迭代次数。

▶️设置 options 的小例子:

options = optimset('GradObj', 'on', 'MaxIter', 100);

介绍完了 fminunc() 方法,再看这两个式子:

function[jVal, gradient] = costFunction(theta)
optTheta = fminunc(@costFunction, initialTheta, options)

其中 gradient、theta、initialTheta 都需要为向量形式,而神经网络中的参数为矩阵形式:

\Theta^{(1)},\Theta^{(2)},\Theta^{(3)},... (权重矩阵)

D^{(1)},D^{(2)},D^{(3)},... (梯度矩阵)

所以,为了方便使用高级的算法对神经网络参数进行优化,我们就需要将这些矩阵形式的参数向量化,就可以将其传入 initialTheta 和 theta,并且得到梯度的返回值 gradient 了~

Ng 老师在课程中使用 Octave 做了过程的演示,很简单就不在此赘述了。


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页