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的更多相关文章

  1. Neural Network学习(二)Universal approximator :前向神经网络

    1. 概述 前面我们已经介绍了最早的神经网络:感知机.感知机一个非常致命的缺点是由于它的线性结构,其只能做线性预测(甚至无法解决回归问题),这也是其在当时广为诟病的一个点. 虽然感知机无法解决非线性问 ...

  2. 机器学习公开课笔记(5):神经网络(Neural Network)——学习

    这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项$\delta$,如何计算 ...

  3. 深度学习笔记之关于基本思想、浅层学习、Neural Network和训练过程(三)

    不多说,直接上干货! 五.Deep Learning的基本思想 假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>….. ...

  4. Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

    3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 ...

  5. 计算机视觉学习记录 - Implementing a Neural Network from Scratch - An Introduction

    0 - 学习目标 我们将实现一个简单的3层神经网络,我们不会仔细推到所需要的数学公式,但我们会给出我们这样做的直观解释.注意,此次代码并不能达到非常好的效果,可以自己进一步调整或者完成课后练习来进行改 ...

  6. 深度学习论文翻译解析(二):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 ...

  7. 深度学习课程笔记(十六)Recursive Neural Network

    深度学习课程笔记(十六)Recursive Neural Network  2018-08-07 22:47:14 This video tutorial is adopted from: Youtu ...

  8. 深度学习课程笔记(十五)Recurrent Neural Network

    深度学习课程笔记(十五)Recurrent Neural Network 2018-08-07 18:55:12 This video tutorial can be found from: Yout ...

  9. Sony深度学习框架 - Neural Network Console - 教程(1)- 原来深度学习可以如此简单

    “什么情况!?居然不是黑色背景+白色文字的命令行.对,今天要介绍的是一个拥有白嫩的用户界面的深度学习框架.” 人工智能.神经网络.深度学习,这些概念近年已经涌入每个人的生活中,我想很多人早就按捺不住想 ...

随机推荐

  1. C# ListView用法详解

    一.ListView类 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设 ...

  2. React Native For Android 环境搭建

    一. 环境搭建 1. JDK更新 http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 使用最新的 ...

  3. [2016.01.22]万峰文本处理专家 v2.1

    <万峰文本处理专家>是一款简单易用,且功能强大的各类文本文件处理软件.1.支持多任务的处理模式,允许一次处理多个任务.2.支持正则表达式替换,替换更加强大:3.支持各类关键字的行处理操作: ...

  4. (WPF) 基本题

    What is WPF? WPF (Windows Presentation foundation) is a graphical subsystem for displaying user inte ...

  5. DNS错误 事件4000 4013

    DNS 错误事件4000 4013,无法创建活动目录本身的区域 WINDOWS 2003 DNS服务器无法解析 错误ID 4000 DNS 服务器无法打开 Active Directory.这台 DN ...

  6. [转载]给IT人员支招:如何跟业务部门谈需求分析?

    一提跟业务人员做“需求分析”,许多IT人员立刻就头大了,要么不在同一个“频道”讲话,要么“变来变去,定不下来”.如何跟业务部门谈需求分析呢,我们带着这个问题,与聚冠因尚的咨询顾问杨春波展开了讨论. 1 ...

  7. Linux 搭建Nexus

    Linux 安装Maven和nexus代理仓库 1    说明 环境:redhat Enterprise Linux Server5.3-x64. 版本:Maven 3.0.5 ,Nexus-2.5. ...

  8. hammerJs-v2.0.4详解

    一.前言 移动端框架当前还处在初级阶段,但相对于移动端的应用来说已经有很长时间了.虽然暂时还没有PC端开发的需求量大,但移动端的Web必然是一种趋势,在接触移动端脚本的过程中,最开始想到的是juqer ...

  9. tornado api 简单模板

    # 安装 pip insatll tornado # 主文件 web_server.py #!/usr/bin/env python # encoding: utf-8 import tornado. ...

  10. CentOS7 配置阿里云yum源

    1)下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2)备份并替换系统的repo文件 cp Centos-7.repo /etc/ ...