【深度学习-5】人工神经网络基础

近几年兴起的深度学习技术本质上也是一种机器学习方法,简单来说就是一系列可以训练多层神经网络(multilayered neural network)的算法。人工神经网络(Artificial Neural Network, ANN)早在上世纪四五十年代就已经出现了,随着理论和计算能力的不断提高,ANN在席卷全球的人工智能和深度学习的浪潮下重新焕发青春。今天我们就来学习ANN的基础知识,为日后训练多层神经网络做准备。

生物神经元(Biological Neuron)

人工神经网络实际上是对人类大脑中的神经网络的一种抽象。我们的大脑由无数个神经细胞构成。每个神经细胞主要可以分为3个部分:树突(dendrite),细胞体(soma)和轴突(axon)。


neuron.png

树突的作用是从外界环境或者其他神经细胞接收刺激,细胞体负责处理从树突接受到的信息并将信息通过轴突传递给其他神经细胞。神经细胞之间通过突触(synapse)联系起来。


neurons.png

人工神经元(Artificial Neuron)

人脑中的信息处理单元是神经细胞,而人工神经网络的计算单元就是人工神经元。


artificial_neuron.png

一个人工神经元由7个基本单元组成:

  1. 来自其他神经元的输入信号(x1, x2, ..., xn)
  2. 每一个输入信号都有一个与之对应的突触权重(w1, w2, ..., wn),权重(weight)的高低反映了输入信号对神经元的重要性
  3. 线性聚合器(∑)将经过加权的输入信号相加,生成一个"激活电压"(activation voltage)
  4. 激活阈值(activation threshold)或bias(θ)给神经元的输出设置一个阈值
  5. 激活电位(activation potential,u)是线性聚合器和激活阈值之差,如果u≥0,神经元产生的就是兴奋信号,如果u<0,神经元产生的是抑制信号
  6. 激活函数(activation function,g)将神经元的输出限制在一个合理的范围内
  7. 神经元产生的输出信号(y),可以传递给与之相连的其他神经元
    用公式表示:


    expressions.png

综上所述,人工神经元的计算可以分成如下几个步骤:

  1. 将神经元的每一个输入和与之对应的突触权重相乘
  2. 对加权后的输入求和,然后减去激活阈值
  3. 使用合适的激活函数来将神经元的输出限制在一定范围内
  4. 将神经元的输出传递给与之相连的神经元

我们可以把多个神经元链接在一起构成一个人工神经网络,比如下面这个由4个input neuron,3个hidden neuron和1个output neuron组成的简单的神经网络:


simple_ann.png

神经网络中的神经元不是杂乱无章地组合在一起,通常情况下,神经元会按层(layer)排列。在上面的网络中,input处于第一层,N1和N2是第二层,N3是第三层,最后一层是output。我们所说的“深度”,实际上就是神经网络的层数。层数越多,神经网络越深也越复杂。我们通常把input和output之间的层叫做hidden layer。

下面再来看一个稍微复杂点的网络:


fully_connected_network.png

从这个例子中我们可以看到以下几点:

  1. 每一层中的neuron和它上一层中的所有neuron都有连接。例如hidden layer中的N1和N2和input layer中的4个input neuron都有连接。我们称这样的网络为全连接神经网络(fully connected neural network)
  2. 同一层中的neuron之间没有连接
  3. 连接是有方向的,从input到output,网络中没有环。我们称这样的网络为前馈神经网络(feedforward neural network)。有环的神经网络也称为循环神经网络(RNN,Recurrent Neural Networks)

人工神经元通常可以分为以下几类:

  1. 输入(input)和输出(output)神经元
    输入神经元从程序中获取数据,输出神经元将神经网络的计算结果返回给程序。程序通常会将一个array作为input传递给神经网络,array中元素的个数和输入层中的神经元数目一致。程序获得的output也是一个array,array中元素的个数和输出层中神经元的数目一致。输入神经元没有激活函数。
  2. 隐藏(hidden)神经元
    input和output神经元负责对外联系,位于它们中间的神经元只能从网络中的其他neuron获取输入并输出给其他neuron。由于它们“与世隔绝”,因此称为隐藏神经元。
  3. 偏置(bias)神经元
    Bias神经元可以位于输入层和隐藏层,但是它不从上一层的neuron中获取input,bias神经元的输出值通常设置为1。


    bias_neurons.png
  4. Context 神经元
    Context 神经元常用在循环神经网络中,用来处理时间序列(Time Series)问题。


    context_neurons.png

激活函数(Activation Functions)

激活函数的作用是给神经元的输出建立一个边界。一个神经网络可以有多个不同的激活函数,选择合适的激活函数对构建神经网络是非常重要的。下面列举几个常用的激活函数。

线性激活函数(Linear Activation Function)
最简单的激活函数就是线性函数,即神经元的输入和输出相等。

linear_activation_equation.png

linear_activation_function.png

当神经网络的输出是数值(比如回归问题)的时候,它的输出层通常使用的是线性激活函数。

Softmax 激活函数(Softmax Activation Function)
Softmax 激活函数通常用在处理分类问题(classification)的神经网络的输出层。Softmax的作用是让神经网络输出每个类别(class)的概率,而不仅仅是一个简单的数值。由于是概率值,它们的和一定是100%
Softmax函数的公式:

softmax_activation_function_equation.png

i表示的是输出神经元的index,j表示的是属于某个group/class的输出神经元的index。z表示的是输出神经元输出的array。Softmax与其他激活函数不同的地方在于它的输出依赖于其他神经元的输出(z)。

比如,我们的神经网络处理的分类问题包含了3个类别(A,B,C),它的3个输出神经元分别对应这3个类别,它的输出是一个包含了3个元素的array:[0.9, 0.2, 0.4],由于第一个数字最大,我们认为分类结果应该是A。如果我们使用softmax函数就可以把它们转换成概率值:

sum = exp(0.9) + exp(0.2) + exp(0.4) = 5.17283056695839
j0 = exp(0.9) / sum = 0.47548495534876745
j1 = exp(0.2) / sum = 0.2361188410001125
j2 = exp(0.4) / sum = 0.28839620365112

Step激活函数(Step Activation Function)
Step函数也被称为阈值(threshold)函数,它的输出值只有0或1。当输入值大于某个阈值(比如0.5)的时候,输出值为1,小于阈值的时候就输出0。

step_activation_function_equation.png

step_activation_function_graph.png

Sigmoid激活函数
Sigmoid激活函数也称为logistic激活函数,它的输出值是0到1之间的数。

sigmoid_activation_function_equation.png

sigmoid_activation_function_graph.png

Hyperbolic Tangent 激活函数
Hyperbolic Tangent 激活函数就是tanh函数,它的输出值是-1到1之间的数。

hyperbolic_tangent_activation_function_equation.png

hyperbolic_tangent_activation_function_graph.png

Rectified linear unit (ReLU) 激活函数
ReLU 函数是目前在神经网络的隐藏层中使用比较多的激活函数(要优于sigmoid和tanh函数,具体原因会在后续文章中讨论),它的公式十分简单:

ReLU_activation_function_equation.png

ReLU_activation_function_graph.png

可以看到当x小于0时,ReLU函数输出的值为0,当x大于0时,ReLU函数的输出为x本身。

参考文献

  1. Ivan Nunes da Silva et al. Artificial Neural Networks, 2017
  2. Jeff Heaton. AIFH, Volume 3: Deep Learning and Neural Networks, 2015
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容