训练及优化神经网络基本流程之第0到6步

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

在之前的笔记中,我记录过《神经网络的代价函数及反向传播算法》,以及使用BP算法(反向传播算法)的一点细节。

这篇笔记想简短地总结记录一下训练并优化神经网络的几个步骤:

第零步:之所以写了个第零步,是想记录一下如何搭建神经网络,毕竟要先有网络才能谈后续的训练和优化。关于构建问题之前也有过记录:《神经网络的模型构建》。输入层的单元个数取决于特征个数,也就是 x^{(i)} ;输出层的单元个数取决于训练集中结果的类别数量。具体需要我们决策的是中间隐藏层的数量以及每层的单元个数。一般来说,默认的隐藏层只有一层,若需要使用多个,则要保证每层的单元个数是相等的。通常隐藏层数越多,结果也越精确,但意味着计算量也随之增大,两者需要平衡。

第一步:进行参数的随机初始化。通常我们需要把参数初始化为趋近于0的极小的值。作逻辑回归时,我们通常将参数初始化为0,但对于神经网络这样是不可行的,若都初始化为0,那么第二层每个单元节点的值都会是相同的,若都初始化为同一个非零的数,结果也是一样的。所以每个参数要在0附近的正负值范围内随机选取。

第二步:执行前向传播。从左向右进行计算,对于输入的任意 x^{(i)},计算出 h_{\Theta}(x^{(i)}) ,结果的形式为向量。

第三步:编写计算代价函数 J(\Theta) 的代码。

第四步:执行反向传播算法,计算所有的偏导数 \frac{\partial}{\partial \Theta_{jk}^{(l)}}J(\Theta) ,即 J(\Theta) 关于 \theta 的偏导数。

第五步:使用梯度检验来将反向传播算法得到的偏导数值,与数值方法得到的估计值进行比较,以确保两种方法得到的值是接近的。进行这步的原因是,在实际运行过程中,我们的代码可能存在很多 bug,J(\Theta) 的值虽然可能在减小,但最后得到的值可能存在极大的误差,采用梯度检查的方法可以减小这种错误的概率。但要注意之后把梯度检查的代码注释掉,因为非常花时间。

第六步:使用梯度下降法或更高级的算法(如BFGS算法、共轭梯度法),与反向传播算法相结合,来将 J(\Theta) 的值最小化。但要注意的是,由于神经网络并不是一个线性的模型,其代价函数 J(\Theta) 是个非凹函数,所以我们使用梯度下降等方法得到的结果只是一个局部最优解,并不保证就是全局最优解。

欢迎关注我的知乎专栏【数据池塘】,专注于分享机器学习、数据挖掘相关内容:https://zhuanlan.zhihu.com/datapool

展开阅读全文

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