神经网络 异或_深度学习入门笔记(2)线性神经网络
在上一篇笔记中我们一起学习了单层感知器的原理,但针对于异或问题。我们的单层神经网络就束手无策了
*异或运算: 0 0 输出为0,0 1输出为1, 1 0输出为 1, 1 1输出为 0
即,针对以下四个点(0,0)(0,1)(1,0)(1,1)对应标签0 ,1,1,0时,我们无法完成分类。
这时候我们就要引入一个新的东西-线性神经网络
我们都知道感知器的激活函数时sign函数,即
该函数只有两个输出值,1和 -1。而线性神经网络的激活函数为 y = x, 即输出值可以为任意实数
线性神经网络采用的时LMS算法来调整网络权值和偏置
该算法的学习信号为
与感知器的非常相似,只是这里的实际输出为Wj .T*X ,相比于感知器,这里少了sign函数。其他则都差不太多。
这里在输出的时候同时运用了线性函数和sign函数。为什么呢?
因为在运算时我们可以通过线性函数得到更好的结果,而输出的时候,因为我们的标签只有两个。假设我们不用sign函数,那输出结果可能有0.2 0.8 -0.3 -0.7,这样就无法分类了
为了完成我们的异或问题分类任务,我们先看下预备知识:
Delta学习规则:该学习规则也被称为来纳许感知器学习规则,Delta学习规则是利用梯度下降法的一般性学习规则。
代价函数(损失函数 Lost Function):
其中误差E是权值 Wj 的函数,若思想让误差E最小,Wj 则应与误差的负梯度成正比,即
有代价函数,可推导出误差梯度为
手写推导过程如下:
梯度下降法:
针对梯度下降法的讨论在这里不做解释了,不太理解的朋友可以看下这个
梯度下降(Gradient Descent)小结www.cnblogs.com
针对梯度下降法的问题也有几个,1.学习率难以选取 2.容易进入局部最优解。这篇文章中不对局部最优解问题进行讨论。大家知道这个概念就可以了
线性网络解决非线性问题:
通过对神经元添加非线性输入,从而引入非线性成分,使等效的输入维度变大。即从X1,X2扩展为 X1,X1^2,X1*X2,X2^2,X2
代码实现:
通过修改单层感知器的代码就可以做出线性网络了。
对于四个点(0,0)(0,1)(1,0)(1,1)根据其标签[0,1,1,0]进行分类
这里X的输入为[X0,X1,X2,X1^2,X1*X2,X2^2] ,对应的权值也随机了6个。
对于实际输出O进行了修改,去掉了sign函数。
样本修改为四个点。
之后我们要设定一个函数用来计算两条分割线 def calculate(x,root)
作图中我们要注意一下,这里的分类线不再是直线了
首先我们推导一下算式
(字丑见笑了)
大家都是接受过初中教育的,对于一元二次方程解法应该不陌生,通常一元二次方程有两个解(根),即root。通过计算我们可以看到a b c分别对应了哪些元素。
然后通过求根公式画出线段
最后运行代码
可以看到最后循环了一千次结束的循环(即并没有得到与期望值相同的实际输出)
源码:
import numpy as np
import matplotlib.pyplot as plt# 输入数据
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,1)
W = (np.random.random(6) - 0.5) * 2print('W=', W)
# 设置学习率
lr = 0.11# 设置迭代次数
n = 0
# 设置输出值
O = 0def update():global X, Y, W, lr, nn += 1O = np.dot(X, W.T)W_C = lr * ((Y - O.T).dot(X)) / X.shape[0] # 平均权值W = W_C + W # 修改权值for _ in range(1000):update() # 更新权值print(W)print(n)O = np.dot(X, W.T) # 计算神经网络输出if (O == Y.T).all(): # 如果实际输出等于期望输出,模型收敛print("finished")print("epoch:", n)break# 正样本(标签为1)
X1 = [1, 0]
Y1 = [0, 1]# 负样本(标签为0)
X2 = [0, 1]
Y2 = [0, 1]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()
神经网络 异或_深度学习入门笔记(2)线性神经网络相关推荐
- 为什么深层神经网络难以训练_深度学习与统计力学(III) :神经网络的误差曲面...
谷歌和斯坦福最新合作综述报告,发表在物理学的顶级期刊"凝聚态物理年鉴"(Annual Review of Condensed Matter Physics).作者Yasaman B ...
- 深度学习入门笔记(六):浅层神经网络
专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分 ...
- 深度学习入门笔记(五):神经网络的编程基础
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(十八):卷积神经网络(一)
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(十九):卷积神经网络(二)
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(八):深层网络的原理
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(四):向量化
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 深度学习入门笔记(十二):深度学习数据读取
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
最新文章
- web前端培训之Javascript如何改变数组的长度?
- 基于特征点匹配的自适应目标跟踪算法
- QT STUDY 模型-视图-控制器
- DNS原理及其解析过程(转)
- nginx缓存服务器
- 操作系统【五】分段内存管理+段页式内存管理
- linux字符设备驱动之字符之异步通知
- linux 守护进程_网络工程师之linux守护进程
- sed的高级命令和软件包管理器rpm
- Parallels中使用加密狗读取文件出现错误
- mac maven安装与配置镜像
- 外国同行看中国互联网“微创新”
- Python pyd文件的制作和编译,以及程序源代码的保护
- 【开箱即用】HTML5教程
- 发现在创建云服务器ecs实例的磁盘快照时_阿里云服务器怎么重装系统 阿里云VPS如何重装系统...
- Web前端页面访问权限控制总结
- android课程设计体重测量仪,智能体重检测仪设计与实现
- 如何让企业员工不觉得知识库是个鸡肋,附带工具推荐
- 软件测试是否应该为软件质量背锅?
- 【a】标签的伪类选择器
热门文章
- WEB-移动端图片适配-弹框
- pytorch 画loss曲线_Pytorch练习amp;#8211;绘制Loss曲线 - 易采站长站
- MySQL 存储过程的变量
- send/receive h264/aac file/data by rtp/rtsp over udp/tcp
- 实验二 20145237 20155226 2015234 实验报告 固件程序设计
- C#中如何动态加载DockPanel
- 让网页图片变灰色的三种方法
- 段错误原理:Segmentation fault: 11
- android 权限
- C++之基类构造函数初始化