首页 > 编程知识 正文

神经网络中的正则化,正则化神经网络

时间:2023-05-04 07:05:43 阅读:188753 作者:1727

1、前向计算

举例(原本没有+1项,这是人为加上去的):

计算步骤:

先添加一个值为1的x0组成输入,θ1(大小是:对面神经元个数 * (此面神经元个数+1),即 3*4)的第i行拿出来与输入做点乘,sigmoid作用之后放到隐藏层第i个神经元里面(i=1,2,3):

再添加一个值为1的x0组成隐藏层,θ2(大小是:1*4)的第1行拿出来与隐藏层神经元做点乘,sigmoid作用之后放到输出层第1个神经元里面:

等价的矩阵形式: 

(注意:下面的X的第一列是加上去的1,而且是把一列1补充到sigmoid的结果处,不是相乘)

生成第一个结果值,即新X:

后面的步骤一模一样,重复该公式计算即可。到最后输出的时候就不用加1了,一行对应一个样本,该行的元素的个数 = 输出层的神经元的个数,从左到右数元素对应从上到下数神经元。

2.代价函数

若输出层有K个神经元,则总的代价函数=每个神经元的代价函数之和,而每个神经元的代价函数就是逻辑回归用的交叉熵代价函数。下面的正则项那里是所有θ矩阵的除第一列以外的所有元素的平方和。而每一个输出神经元对应的标签范围都会转化为0和1这两个数。此处把概率值和one-hot编码结合计算代价函数。

 

3.反向传播(BP)

①假定有m个样本,并设定误差矩阵为零矩阵:

②从样本1到样本m,循环m次,下图中a表示神经元的值,对于样本i,先设置输入层神经元的值为样本i的所有特征,然后前向更新所有神经元的值,记此时的a向量包含偏置项1。接下来从最后一层一步步地走向第二层算出每层对应的误差项(第一层误差不算),随后更新误差矩阵的值。

其中:,这个公式里面的θ是去掉第一列的θ

最后一步的误差矩阵的更新可以用矩阵来等价表示:(计算在第1个样本下,l=1,2,3,...L-1的误差矩阵分别是多少,然后再第二个样本下,l=1,2,3,...L-1的误差矩阵还要累加上前面的结果,。。。。,还要注意:这里的a要带上偏置项1)

 

③循环结束之后,计算代价函数对参数的偏导:

其中: 

 ④使用梯度下降算法或其他更高级的算法更新参数

 4、梯度检验

 可以用下图的双侧差分来检验自己的梯度是否正确。

5、初始化参数

0初始化可能会导致神经网络很多权值是相等的,使得它就等价于一个逻辑回归,这样这个网络就不能学到很多东西了。

解决方法:将其随机初始化到接近到0的区间。可以采用如下代码:

 

转载于:https://www.cnblogs.com/pjishu/p/10787609.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。