上一篇《机器学习:神经网络的代价函数及反向传播算法》记录了如何使用反向传播算法计算代价函数的导数,其中一个细节就是需要把参数的矩阵表达式展开成向量的形式,以便在后来使用高级的优化算法。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,
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 都需要为向量形式,而神经网络中的参数为矩阵形式:
(权重矩阵)
(梯度矩阵)
所以,为了方便使用高级的算法对神经网络参数进行优化,我们就需要将这些矩阵形式的参数向量化,就可以将其传入 initialTheta 和 theta,并且得到梯度的返回值 gradient 了~
Ng 老师在课程中使用 Octave 做了过程的演示,很简单就不在此赘述了。
⬇️ 扫描下方二维码关注公众号【数据池塘】 ⬇️
回复【算法】,获取最全面的机器学习算法网络图: