Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt
1. Frank Rosenblatt
首先介绍的是神经网络的开山祖师,先放张图拜拜

Frank Rosenblatt出生在纽约,父亲是医生,其1956年在Cornell大学拿到博士学位后,留校任教,研究方向为心理学和认知心理学。1957年,Frank提出了Perceptron的理论。1960年,在计算机运算能力还不强的时候,其使用基于硬件结构搭建了一个神经网络,大概长下面这样(跪)。

但是和所有先驱一样,Frank开创性的工作并没有在当时得到认可。当时两位科学家 Marvin Minksy 和 Seymour Papert(这两位之后都成了AI界泰斗级的人物)对Frank的工作表示质疑,认为他只不过想博取世人眼球,并且还特地写了一本书来批判Perceptron,书名就叫《Perceptron》。也就是这本书,导致Perceptron沉寂了将近20年,直到80年代另一位dalao — Hinton发明BP算法,让其成为当今AI最热门的领域。
2. 感知机介绍
感知机出现时为了解决二分类问题(这也成了其的局限:只能解决二分类问题)。其基本形式可以用一下公式来表示
$y(\mathbf{x}) = f(\mathbf{w}^T\mathbf{\phi}(\mathbf{x}))$ (1)
其中$\mathbf{w}$是感知机的参数,$\mathbf{x}$是一个训练样本。$\mathbf{\phi}$是任意一组基本函数。其中$\mathbf{\phi}_0(x) = 1$,即感知机也包含bias这一项。f(a)是step function,即在a大于等于零时,f(a) = 1; a小于零时,f(a) = -1。对应的,我们二分类问题的标签值为{1,-1}而不是{1,0}。
假设$\mathbf{w}$已知,对于一个新的未打标签的样本$\mathbf{x}$,计算$f(\mathbf{w}^T\mathbf{\phi}(\mathbf{x}))$的值。如果其大于零,则其标签标为1;如果小于零,则其标签标为-1。
3. 感知机训练
要训练感知机的权值$\mathbf{w}$,首要任务就是定义误差函数(error function or loss function)。一个很简单直接的想法就是counting:把所有预测错的训练样本个数作为其误差函数。这样我们的误差函数就是一个分段常数函数,即在不同的区域内为不同的常数,就比如上面提到的step function。原因我们可以这么理解。参数$\mathbf{w}$可以看做是一个超平面,训练过程就是不断调整其位置和角度。在这个超平面移动时,如果没有越过任何一个训练点,那么其误差函数不变;越过某一个训练点,那么误差函数就要加一(或减一)。这样一个分段函数是不可微分的,如果我们想使用梯度下降法来优化的话,明显是不合适的。
既然counting的方法不合适是来源于其不可导,那么我们就选择另一种可导的误差函数,叫做perceptron criterion。首先我们注意到,对于每一个训练点,$\mathbf{w}^T\mathbf{\phi}(\mathbf{x})t_n>0$恒成立(原因是在最优情况下,$\mathbf{w}^T\mathbf{\phi}(\mathbf{x})$和$t_n$的正负号相同)。Perceptron criterion是这样一个误差函数:如果一个训练点被正确预测,则误差为零;如果一个训练点未能正确预测,那么其误差函数为$-\mathbf{w}^T\mathbf{\phi}(\mathbf{x})t_n$。那么对于总的误差函数为:
$E_p(\mathbf{w}) = - \sum_{n\epsilon\mathcal{M}}\mathbf{w}^T\mathbf{\phi}(\mathbf{x})t_n$ (2)
其中$\mathcal{M}$表示被错误预测的训练点的集合。
很容易计算,对于一个数据点n,${\nabla}E_p(\mathbf{w}) = -\mathbf{\phi}(\mathbf{x})t_n$
然后使用SGD可以得到更新公式
$\mathbf{w}^{({\tau}+1)}$ = $\mathbf{w}^{({\tau})}$ + ${\eta}\mathbf{\phi}(\mathbf{x})t_n$ (3)
至此,我们可以总结一下感知机训练的算法。
step1 : 随机初始化$\mathbf{w}^{0}$。
step2 : 选取训练集中一点(顺序或随机),计算其$\mathbf{\phi}(\mathbf{x})t_n$的值。如果其大于0,则跳至step3;如果其小于0,则使 用公式(3)更新$\mathbf{w}$。
step3 : 判断是否收敛,如果不收敛,则跳至step2。
4. 实验结果
为了测试感知机的性能,我取一条直线 y + 0.3x + 0.2 ,随机取100个点并标注上1 或 -1 。代码使用python写。结果如下:


其中左图中,两种颜色的点分别代表两种label的点,蓝色的直线就是 y + 0.3x + 0.2 , 红色的直线是我们随机初始化w的直线。
右图是训练之后得到的结果,可以看到,红线已经能完全分开两种点。
5. 总结
1. 虽然理论证明了,如果线性分类问题有解的话,感知机一定能找到这个解,但是在实验中确实存在无法找到解的情况。我现在暂时想到的原因可能是我们随机取的点与直线太接近,导致无法收敛。
2. 感知机能保证最后收敛,但是其并不能保证每一次更新都会使分类误差减小。(例子可见github https://github.com/chencjGene/SoftEngineering/tree/master/NN/Perceptron)
3. 随机取点并不会提高其收敛率。
Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt的更多相关文章
- Neural Network学习(二)Universal approximator :前向神经网络
1. 概述 前面我们已经介绍了最早的神经网络:感知机.感知机一个非常致命的缺点是由于它的线性结构,其只能做线性预测(甚至无法解决回归问题),这也是其在当时广为诟病的一个点. 虽然感知机无法解决非线性问 ...
- 机器学习公开课笔记(5):神经网络(Neural Network)——学习
这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项$\delta$,如何计算 ...
- 深度学习笔记之关于基本思想、浅层学习、Neural Network和训练过程(三)
不多说,直接上干货! 五.Deep Learning的基本思想 假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>….. ...
- Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1
3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 ...
- 计算机视觉学习记录 - Implementing a Neural Network from Scratch - An Introduction
0 - 学习目标 我们将实现一个简单的3层神经网络,我们不会仔细推到所需要的数学公式,但我们会给出我们这样做的直观解释.注意,此次代码并不能达到非常好的效果,可以自己进一步调整或者完成课后练习来进行改 ...
- 深度学习论文翻译解析(二):An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition
论文标题:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application ...
- 深度学习课程笔记(十六)Recursive Neural Network
深度学习课程笔记(十六)Recursive Neural Network 2018-08-07 22:47:14 This video tutorial is adopted from: Youtu ...
- 深度学习课程笔记(十五)Recurrent Neural Network
深度学习课程笔记(十五)Recurrent Neural Network 2018-08-07 18:55:12 This video tutorial can be found from: Yout ...
- Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单
“什么情况!?居然不是黑色背景+白色文字的命令行.对,今天要介绍的是一个拥有白嫩的用户界面的深度学习框架.” 人工智能.神经网络.深度学习,这些概念近年已经涌入每个人的生活中,我想很多人早就按捺不住想 ...
随机推荐
- 【python】调用机器喇叭发出蜂鸣声(Beep)
##coding:utf-8 import winsound winsound.Beep(600,6000) #其中600表示声音大小,1000表示发生时长,1000为1秒
- GDI+ 操作TIFF ccitt t.6 压缩
Bitmap Bi=new Bitmap("C:\img.tif"); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Fil ...
- 如何在 Delphi 中静态链接 SQLite
搞了我几个小时,终于成功在 Delphi 中静态链接了 SQLite (v3.5.4),下一步就是研究加密了,呵呵中间其实遇到很多问题,今天累了,就不说了,改天补上 下载测试工程 下面说说方法 1.当 ...
- mybatis实战教程(mybatis in action)之一:开发环境搭建
mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载. 首先建立一 ...
- git学习:多人协作,标签管理
多人协作: 查看远程库的信息, git remote 推送分支到远程库 git push origin master/dev 注意:master是主分支,时刻需要与远程同步 dev是开发分支,也需要与 ...
- SQL2008 清除日志
USE [master] GO ALTER DATABASE BizTest SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE BizTest SE ...
- C#实现堆栈
堆栈(Stack)是一种特殊的线性表,是一种操作只允许在尾端进行插入或删除等操作的线性表.表尾允许进行插入删除操作,称为栈顶(Top),另一端是固定的,称为栈底(Bottom).栈的操作使按照先进后出 ...
- 再看 AspriseOCR - OCR应用开发 -20151124
再看 AspriseOCR - OCR应用开发 我写这个博文时间为 2015/11/24日,注意时间因为,网上很多文章时间上很久远,有的已经不能参考了 很多人面对从图片中识别文字或者数字0~9 A~ ...
- CRLF和LF
协作项目,开发环境不同(mac,window)构建过程中,命令行报错(expecting LF but only find CRLF) 打开git bash,输入 $ git config --glo ...
- reverse engineering in ax
install Visio2010 Premium(UML model template). not work in Visio 2013 and other version.