深度学习基础模型算法原理及编程实现--02.线性单元
2018-02-21 14:14
1181 查看
文章列表
1.深度学习基础模型算法原理及编程实现–01.感知机.
2.深度学习基础模型算法原理及编程实现–02.线性单元 .
3.深度学习基础模型算法原理及编程实现–03.全链接 .
4.深度学习基础模型算法原理及编程实现–04.改进神经网络的方法 .
5.深度学习基础模型算法原理及编程实现–05.卷积神经网络.
6.深度学习基础模型算法原理及编程实现–06.循环神经网络.
9.深度学习基础模型算法原理及编程实现–09.自编码网络.
…
深度学习基础模型算法原理及编程实现–02.线性单元
线性单元
1线性单元的训练
1.1.1前向计算
1.1.2误差项计算
1.1.3系数更新
1.1.4小结
1.2 编程实现
图 2线性单元模型
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
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
b=b−η∂E∂b(1.10)(1.10)b=b−η∂E∂b
python版本:https://pan.baidu.com/s/1qZLJ7Gg
C++版本:https://pan.baidu.com/s/1qZLJ7Gg
1.深度学习基础模型算法原理及编程实现–01.感知机.
2.深度学习基础模型算法原理及编程实现–02.线性单元 .
3.深度学习基础模型算法原理及编程实现–03.全链接 .
4.深度学习基础模型算法原理及编程实现–04.改进神经网络的方法 .
5.深度学习基础模型算法原理及编程实现–05.卷积神经网络.
6.深度学习基础模型算法原理及编程实现–06.循环神经网络.
9.深度学习基础模型算法原理及编程实现–09.自编码网络.
…
深度学习基础模型算法原理及编程实现–02.线性单元
线性单元
1线性单元的训练
1.1.1前向计算
1.1.2误差项计算
1.1.3系数更新
1.1.4小结
1.2 编程实现
深度学习基础模型算法原理及编程实现–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+boi=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∂Wb=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
相关文章推荐
- 深度学习基础模型算法原理及编程实现--05.卷积神经网络
- 深度学习基础模型算法原理及编程实现--09.自编码网络
- 深度学习基础模型算法原理及编程实现--01.感知机
- 深度学习基础模型算法原理及编程实现--06.循环神经网络
- 深度学习基础模型算法原理及编程实现--04.改进神经网络的方法
- 深度学习基础模型算法原理及编程实现--03.全链接
- 零基础入门深度学习(2) - 线性单元和梯度下降
- 【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C++)
- 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历
- 深度学习基础(五):循环神经网络概念、结构及原理实现
- 零基础入门深度学习(2) - 线性单元和梯度下降
- 深度学习基础(二):简单神经网络,后向传播算法及实现
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C++)
- 零基础入门深度学习(2) - 线性单元和梯度下降
- 深度学习基础(六):LSTM模型及原理介绍
- 机器学习深度学习基础笔记(2)——梯度下降之手写数字识别算法实现
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 【算法学习】AVL平衡二叉搜索树原理及各项操作编程实现(C++)
- 零基础入门深度学习(2) - 线性单元和梯度下降--https://www.zybuluo.com/hanbingtao/note/448086