线性神经网络及其代码实现
2017-11-24 04:02
239 查看
线性神经网络
学习规则
最小均方LMS学习规则
连续感知器delta学习规则
梯度下降局部极小和迭代学习率过大发散不收敛自适应
线性神经网络代码实现
根据学习模型预测的标签为pi=f(∑i=1nwixi)=∑i=1nwixi,
二者之间的差距为ri=yi−pi,
根据差距ri对权值wi进行调整△wi=ηrixi(0<η≤1是学习率)
注:△wi公式是对平方误差损失函数关于参数wi求梯度得到的
根据学习模型预测的标签为pi=f(∑i=1nwixi),
损失函数L=12r2i=12(yi−pi)2=12(yi−f(∑i=1nwixi))2
记w=(w1,w2,⋯,wn)T,x=(x1,x2,⋯,xn)T
可得梯度∇wL=−(yi−f(∑i=1nwixi))f′(∑i=1nwixi)x=−rif′(∑i=1nwixi)x
由梯度下降法得对权值wi的调整
△wi=η∇wiL=ηrif′(∑i=1nwixi)xi(0<η≤1是学习率)
注意,对比以上两个学习规则可见,最小均方(LMS)学习规则是连续感知器(δ)学习规则的特例。
google tensorflow可视化工具:http://playground.tensorflow.org
学习规则
最小均方LMS学习规则
连续感知器delta学习规则
梯度下降局部极小和迭代学习率过大发散不收敛自适应
线性神经网络代码实现
线性神经网络
学习规则
最小均方(LMS)学习规则
数据的实际标签为yi,根据学习模型预测的标签为pi=f(∑i=1nwixi)=∑i=1nwixi,
二者之间的差距为ri=yi−pi,
根据差距ri对权值wi进行调整△wi=ηrixi(0<η≤1是学习率)
注:△wi公式是对平方误差损失函数关于参数wi求梯度得到的
连续感知器(δ)学习规则
数据的实际标签为yi,根据学习模型预测的标签为pi=f(∑i=1nwixi),
损失函数L=12r2i=12(yi−pi)2=12(yi−f(∑i=1nwixi))2
记w=(w1,w2,⋯,wn)T,x=(x1,x2,⋯,xn)T
可得梯度∇wL=−(yi−f(∑i=1nwixi))f′(∑i=1nwixi)x=−rif′(∑i=1nwixi)x
由梯度下降法得对权值wi的调整
△wi=η∇wiL=ηrif′(∑i=1nwixi)xi(0<η≤1是学习率)
注意,对比以上两个学习规则可见,最小均方(LMS)学习规则是连续感知器(δ)学习规则的特例。
梯度下降:局部极小和迭代学习率过大发散不收敛(自适应)
线性神经网络代码实现
异或问题import numpy as np import matplotlib.pyplot as plt #输入数据,x0,x1,x2,x1^2,x1x2,x2^2 X = np.array([[1,0,0,0,0,0], [1,0,1,0,0,1], [1,1,0,1,0,0], [1,1,1,1,1,1]]) #标签 Y = np.array([-1,1,1,-1]) #权值初始化,1行3列,取值范围-1到1 np.random.seed(0) W = (np.random.random(6)-0.5)*2 print(W) #学习率设置 lr = 0.11 #计算迭代次数 n = 0 #神经网络输出 P = 0 #参数更新 def update(): global X,Y,W,lr,n n+=1 P = np.dot(X,W.T) W_C = lr*((Y-P.T).dot(X))/int(X.shape[0]) W = W + W_C #Output:[ 0.09762701 0.43037873 0.20552675 0.08976637 -0.1526904 0.29178823] for _ in range(100000): update()#更新权值 #正样本 x1 = [0,1] y1 = [1,0] #负样本 x2 = [0,1] y2 = [0,1] #可视化绘制分离界面w0+w1x1+w2x2+w3x1^2+w4x1x2+w5x2^2=0,wi已求得,对给定x,求y的解析式 def calculate(x,root): a = W[5] b = W[2]+x*W[4] c = W[0]+x*W[1]+x*x*W[3] if root==1: return (-b+np.sqrt(b*b-4*a*c))/(2*a) if root==2: return (-b-np.sqrt(b*b-4*a*c))/(2*a) xdata = np.linspace(-1,2) plt.figure() plt.plot(xdata,calculate(xdata,1),'r') plt.plot(xdata,calculate(xdata,2),'r') plt.plot(x1,y1,'bo') plt.plot(x2,y2,'yo') plt.show() print(W) #Output:[-1. 1.17030618 0.95686926 0.82969382 -4. 1.04313074]
google tensorflow可视化工具:http://playground.tensorflow.org
相关文章推荐
- 基于Theano的多层神经网络及其实现(三)(实现代码)
- 机器学习与神经网络(三):自适应线性神经元的介绍和Python代码实现
- 一个21行C#代码实现的神经网络
- 斯坦福大学深度学习公开课cs231n学习笔记(9)softmax分类和神经网络分类代码实现
- 十一行Python代码实现一个神经网络(第一部分)
- Python20行代码实现多层神经网络的学习
- 深度学习论文-神经网络的代码实现(python版本)
- 一个 11 行 Python 代码实现的神经网络
- 机器学习(11.4)--神经网络(nn)算法的深入与优化(4) -- CorssEntropyCost(交叉熵代价函数)数理分析与代码实现
- TensorFlow技术解析与实战 6 神经网络的发展及其 TensorFlow 实现
- 70行代码实现的神经网络算法
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- 神经网络及其简单实现(MATLAB)
- Python神经网络代码识别手写字的实现流程(一):加载mnist数据
- 如何用70行Java代码实现深度神经网络算法
- 十一行Python代码实现一个误差逆传播(BP)神经网络
- 【神经网络】11行Python代码实现的神经网络
- MATLAB神经网络编程(三)——线性神经网络的构建与实现
- 机器学习:神经网络、正则化、多分类问题与Python代码实现
- CMU & Facebook论文解读 | 非局部神经网络(附代码实现)