深度学习笔记(四)—— 神经网络结构[Neural Network Architectures]

  这是深度学习笔记第四篇,完整的笔记目录可以点击这里查看。
  
  本博客主要讲解一下神经网络的结构,具体的实现可以查看这篇博客。
  神经网络被建模为在一个非循环图中连接的神经元的集合。换句话说,一些神经元的输出可以变成其他神经元的输入。循环是不允许的,因为这意味着在网络的正向传播过程中会出现无限循环。神经网络模型通常被组织成不同的神经元层,而不是由连接的神经元组成的无定形点。对于规则神经网络,最常见的层类型是全连接层(fully-connected layer),其中两个相邻层之间的神经元完全成对连接,但单层内的神经元不共享连接。下面是两个使用全连接层堆叠的示例神经网络:
深度学习笔记(四)—— 神经网络结构[Neural Network Architectures]_第1张图片
  需要注意的是,当我们说N层神经网络时,我们并没有把输入层算进来。因此,单层神经网络描述的网络没有隐藏层(输入直接映射到输出)。从这个意义上来说,你有时会听到人们说,逻辑回归或支持向量机只是单层神经网络的一个特例。你也可以听到这些网络交替(interchangeably)称为“人工神经网络”(ANN)或“多层感知器”(MLP)。许多人不喜欢将神经网络和真实大脑作类比,而更喜欢将神经元(neuron)称为单元(unit)。
  与神经网络中的其他层不同,输出层神经元通常没有激活函数(或者可以认为它们具有线性一致性的激活函数)。这是因为最后一个输出层通常用来表示类的分数(例如在分类问题中),这是任意实值(real-valued)数,或某种实值目标(例如在回归中)。
  通常用来衡量神经网络大小的指标是神经元的数量,或者更常见的是参数的数量。使用上图中的两个示例网络作为示例来计算待学习的参数个数:

  • 第一个网络(左)有4+2=6个神经元(不计算输入),[3 x 4]+[4 x 2]=20个权值和4+2=6个偏差(bias),总共有26个待学习的参数。
  • 第二个网络(右)有4+4+1=9个神经元,[3 x 4]+[4 x 4]+[4 x 1]=12+16+4=32个权值和4+4+1=9个偏差,总共有41个待学习参数。

  使用上图中的示例三层神经网络,输入将是一个[3x1]向量。一个层的所有连接强度都可以存储在一个矩阵中。例如,第一个隐藏层的权重W1的大小为[4x3],所有单位的偏差在向量b1中的大小为[4x1]。这里,每个神经元的权值都在W1的一行中,所以矩阵向量相乘的结果np.dot(W1,x)评估该层所有神经元的激活情况。类似地,W2是存储连接第二个隐藏层的[4x4]矩阵,W3是最后一个(输出)层的[1x4]矩阵。这个三层神经网络的整个前向传播是简单的三个矩阵乘法,期间穿插使用激活函数:

# forward-pass of a 3-layer neural network:
f = lambda x: 1.0/(1.0 + np.exp(-x)) # activation function (use sigmoid)
x = np.random.randn(3, 1) # random input vector of three numbers (3x1)
h1 = f(np.dot(W1, x) + b1) # calculate first hidden layer activations (4x1)
h2 = f(np.dot(W2, h1) + b2) # calculate second hidden layer activations (4x1)
out = np.dot(W3, h2) + b3 # output neuron (1x1)

  在上述代码中,W1W2W3b1b2b3是网络的待学习参数。还要注意的是,变量x可以保存整个batch的训练数据(其中每个输入样本都是x的一列),而不是一个单一的输入列向量。这样,所有样本都可以有效地并行计算。请注意,最后一个神经网络层通常没有激活函数。
  上面的示例只是非常非常简单的网络,现代卷积网络一般包含大约1亿个参数,通常由大约10-20个层组成(因此称为deep learning)。



*本博客翻译总结自CS231n课程作业网站,该网站需要才能访问。

你可能感兴趣的:(CS231n课程笔记,神经网络,网络,深度学习,人工智能)