本文选择课程中难理解的重点部分进行通俗讲解,喜欢的话请打赏贫穷的程序媛少女,多谢客官。
(一)初识神经网络结构
1) 是分层组织
神经网络是对在非循环图中连接的神经元集合的建模。换句话说,一些神经元的输出可以成为其他神经元的输入。不允许循环,是因为循环意味着网络正向传递中的无限循环。神经网络模型通常被组织成不同的神经元层,而不是连接神经元的无定形斑点。对于常规神经网络,最常见的层类型是完全连接的层(fully-connected layer),其中两个相邻层之间的神经元完全成对连接,但单个层内的神经元不共享连接。以下是使用一堆完全连接的图层的两个示例神经网络拓扑:
2)命名惯例:
请注意,当我们说N层神经网络时,我们不计算输入层(input layer)。如上图,两个隐藏层(hidden layer)加一个输出层(output layer), 因此是个三层盛景网络。 同理,单层神经网络就描述了没有隐藏层的网络(输入直接映射到输出;只有输入层和输出层)。
从这个意义上说,你有时可以听到人们说逻辑回归(Logistic regression)或自动向量机(SVM)只是单层神经网络的特例。你也可以听到这些网络也被地叫做人工神经网络“ Artificial Neural Networks”(ANN)或 多层感知机 “Multi-Layer Perceptrons”(MLP)。
3)测量神经网络大小:
人们通常用来测量神经网络大小的两个指标是神经元的数量,或者更常见的是参数的数量。使用上图中的三层神经网络:
4+4+1=9个神经元(neurals)(不算输入层)
[3*4] + [4*4] + [4*1] = 32 权重(weights)(每相邻两层神经元的个数相乘)
4+4+1=9个偏差(biases) (不计入输入层,等同于神经元个数)
(二)对简单神经网络进行计算(反向传播前)
首先来看一下生物神经元的卡通绘图(左)及其数学模型(右),请尤其注意看右边的数学模型表达式。
我们要求得的就是最后的
这是一个重复矩阵乘法与激活函数交织的过程。神经网络被组织成层的主要原因之一是这种结构使得使用矩阵向量运算来评估神经网络非常简单和有效。
这一两层神经网络的例子中,输入将是[2x1]向量,层的所有连接强度可以存储在单个矩阵中。
第一层计算公式为:h1=f(np.dot(W1,x)+b1)
最外层的f()是激活函数,此题目中采用了sigmoid函数,即
(由于简书公式排版可能带来误解,特解释此处为e的-x次幂)
详解如下,第一隐藏层的权重W1的大小为[2x2],所有单位的偏差将在大小为[2x1]的向量b1中。这里,每个神经元的权重都在W1的行中。
对输入到隐藏层节点进行加权求和:3*5+4*8=47 3*6+4*10=58
执行sigmoid激活: 和
对隐藏层到输出节点进行加权求和:47*11+58*12=1213
注意输出层(Output layer)与神经网络中的其他层不同,输出层神经元通常不具有激活函数(activation function) 这是因为最后的输出层通常用于表示类别得分(class scores).
(注释:类别得分的意思是不同的数代表不同的类别。比如CIFAR-10数据集就是有10个类别,那么数字1-10分别就代表了这个数据集中不同的类别)
(三)用python进行三层神经网络实现
import numpy
f = lambda x: 1.0/1.0 + numpy.exp(-x)
x = numpy.random.randn(3,1)
h1=f(numpy.dot(W1,x)+b1)
h2=f(numpy.dot(W2,h1)+b2)
out=numpy.dot(W3,h2)+b3