A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

深度学习基础模型算法原理及编程实现–02.线性单元

线性单元

感知机的激活函数为阶跃函数,输出为(+1,-1),只能用于分类问题。如果将其激活函数改为有连续输出值的函数,那么就可以用来解决回归问题。线性单元的激活函数ff可表示为f(x)=xf(x)=x,这样线性单元的返回值将是一个实数,而不是(+1,-1)分类,因此线性单元用来解决回归问题而不是分类问题。

图 2线性单元模型
1线性单元的训练

对于数据集T={(x1,y1),(x2,y2),......,(xN,yN)}T={(x1,y1),(x2,y2),......,(xN,yN)},其中xixi为输入元素,yiyi为输出元素,线性单元的作用就是寻找合适的输入和输出之间的映射关系,从而解决回归问题。与一般的神经网络训练方法类似,线性单元的训练方法都可以归结为3个步骤,前向计算、误差项计算以及系数更新。

1.1.1前向计算

net=Wxi+b(1.1)
(1.1)net=Wxi+b

oi=f(net)(1.2)
(1.2)oi=f(net)

其中xixi为第ii个输入元素, WW为输入元素到节点的权重系数矩阵,表示输入相应于输出的重要性, bb为偏置系数,某种意义上将表征了阈值的负数, netnet 为节点的加权输入, ff为激活函数, oioi为第ii个输入的输出项。线性单元中的激活函数定义如下:
y=f(x)=x(1.3)
(1.3)y=f(x)=x
1.1.2误差项计算

在介绍误差项之前,首先介绍目标函数,与感知机不同,线性单元的目标函数可以表示为:
E=12∑i=1N(yi−oi)2(1.4)
(1.4)E=12∑i=1N(yi−oi)2

其中系数项写成1/2是为了方便后面计算时能够将公式的系数项归一化,yiyi为真实值,由此不难发现目标函数表征了输出值与真实值之间的误差。对于线性单元,上式可进一步整理为:
E=12∑i=1N(yi−Wxi−b)2(1.5)
(1.5)E=12∑i=1N(yi−Wxi−b)2

为了使输出值与真实值尽量一致,应该寻找合适的WW和bb使得目标函数的值最小。同样利用梯度下降法来解决,由于线性单元模型较为简单,目标函数对加权输入节点的偏导数对各参数求解的意义不大。而损失函数对权重系数及偏置项的偏导数可表示为:
∂E∂W(j)=∑i=1N(oi−yi)xi(j)(1.6)
(1.6)∂E∂W(j)=∑i=1N(oi−yi)xi(j)

∂E∂b=∑i=1N(oi−yi)(1.7)
(1.7)∂E∂b=∑i=1N(oi−yi)

式(1.6)中的j表示输入项中的第j个元素,将其扩展成矢量形式,有:
∂E∂W=∑i=1N(oi−yi)xi(1.6)
(1.6)∂E∂W=∑i=1N(oi−yi)xi
1.1.3系数更新

W=W−η∂E∂W(1.9)
(1.9)W=W−η∂E∂W

b=b−η∂E∂b(1.10)
(1.10)b=b−η∂E∂b
1.1.4小结

1.2 编程实现

这里参考了“无基础入门深度学习(2)”中的编程实例,我觉得“无基础入门深度学习”是一个很好的学习资料。下面通过线性单元实现收入与工作时间的映射关系。由于线性单元算法编程实现比较简单,这里不再做详细说明,可直接参看上传的代码,或者自己手动编写一个。
python版本:https://pan.baidu.com/s/1qZLJ7Gg
C++版本:https://pan.baidu.com/s/1qZLJ7Gg
---------------------
【转载】
作者:drilistbox
原文:https://blog.csdn.net/drilistbox/article/details/79342784


3 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马