【论文】神经网络——入门——A Quick Introduction to Neural Networks Posted on August 9, 2016 by ujjwalkarn

阅读文章:

A Quick Introduction to Neural Networks

地址 :

https://ujjwalkarn.me/2016/08/09/quick-intro-neural-networks/


笔记:

Introduction

人工神经网络(ANN)是一种计算模型,这种模型收到了人脑的生物神经网络的启发。在机器学习的相关研究和工业使用中,起到了很重大的作用。在文本处理和计算机识别方向也达成了巨大突破。本文只介绍一种特别的ANN模型——多层感知器。


A single neuron

一个单神经元是什么样子的呢?神经网络中最基本的单元就是神经元,英文node / unit 。 他获得 input 或外界 resource,然后估算出一个output。

其中,每一个input 都有一个对应的权重 weight , 这个weight 是根据各个 input 对 output 相对的重要关系而分配的。

每一个node又在内部存在一个function , 这个 function 的参数是 weighted sum 。 

    function 实际上是——一个非线性的“激活函数”,作用是将非线性的各种特征 整合到 一个output 中。

/*思想:因为自然世界中大多数东西都是非线性的,而我们希望把自然界这些东西分类。譬如让我们知道 苹果虽然长得都不大一样,但他都是苹果;每个人写 1 写的都不一样,但是我们希望能识别出这是 1 */

    weighted sum = ∑ ( input * input 对应的 weight ) + b (下面解释一下这个b)


我们可以看到上图中又一个 1 和 对应的权重 b ,这个 b 我们称之为1 对应的偏差 ( bias ) , 1 可以理解为除了input 以外的一个输入,也就是上面我们说的 resource 。为什么要导入resource 呢? 实际上它为各个节点提供了一个可训练的“恒定值”,简单理解他可以提高整个模型的分类准确度。这样的节点我们称之为 bias node

    集中常见的激活函数:

    1. sigmoid : 将任意输入变为 0 - 1 之间的数    σ(x) = 1 / (1 + exp(−x))

    2. tanh(双曲正切函数):将任意输入变为 [- 1 , 1 ] 之间的数     tanh(x) = 2σ(2x) − 1

    3. ReLU(线性整流函数):阈值函数,将负值整流为 0    f(x) = max(0, x)


Feedforward Neural Network

这是最简单的ANN模型。

首先他被分为很多个 layer , 最简单的三层模型,分别包括 Input Layer , Hidden Layer , Output Layer ,我们规定Hidden Layer的层数是 0 ~ multiple(没错!可以没有!越多越复杂~)

每个Layer 中会有很多 node ,临近层的node之间会有 connections / edges , 而我们分别赋予这些 connections 不同的 weights 。

就像这样——


Input nodes——不进行,仅起传递作用

Hidden nodes——计算和传播信息

Output Nodes——和想要的输出相关。比如如果你想进行数字识别,那么output nodes就应该分别是0~9十个数字。

在feedforward network中,没有cycle / loop , 这是与循环神经网络(RNN)的不同之处。

<注>feedforward network的典型模型

1.单层感知器Single Layer Perceptron : Hidden Layer = 0 , function 只能是线性的

2.多层感知器Multi Layer Perceptron : Hidden Layer != 0 , function可以是非线性的


Multi Layer Perceptron ( MLP ) 

当我们希望用MLP进行分类时候,常把Output Nodes的值设为0,1 来表示真或者假。


Training our MLP : The Back - Propagation Algorithm  反向传播算法

反向传播算法属于“有监督学习”,有监督是指他从labeled training data中学习,贴标签,指的是“我们会告诉系统结果是否正确”,比如我们希望输出2,那么我们就给这一组训练数据贴一个2的标签。而这些数据呢,我们就称之为labeled data

“学习”其实就是在纠正改进weights值的过程。给出一个输入向量(对滴!input在各种算法中一般以向量形式存在),通过weights进行计算,最终我们会得到一个输出(其实输出也是一个向量,假设我们想输出数字2,其实就是{ 0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 })。

那么反向传播算法具体是怎么做的呢

首先,初始化包括——

    1. 将所有的edge weights “任意”赋值

    2. 给每组数据“贴标签”

然后,计算一次得到一个output,并根据error对weight进行“调整”

    1.针对输出结果的调整

    2.针对整体输出的调整——我们有这样一个需求,我们希望output node中所有node对应的概率之和为1,这个时候我们常常会用到Softmax function。(柔性最大值传播函数)


反复调整直到达到希望的误差范围。

一旦完成了整个过程,我们就有了一个learned ANN。


最后,我们还可以给出新的不知道label的数据,希望来看看我们的ANN好不好用。


推荐附加链接:

· 多层感知器模型   http://scs.ryerson.ca/~aharley/vis/fc/

阅读更多

没有更多推荐了,返回首页