一 感知机
感知机的结构如下图所示:
添加**函数后,感知机可以用来完成二分类任务。阶跃函数和符号函数由于不连续导致了导数为0,因此无法利用梯度下降算法来参数优化,与此同时,以感知机为代表的线性模型不能解决异或(XOR)等线性不可分问题,所以在应用上受到很大的限制。
二 全连接层
下图的网络结构可看出,每个输出节点都和全部的输入节点相连接,那么这种网络层就叫做全连接层。
三 神经网络
这种由神经元相互连接而成的网络叫做神经网络。下图通过堆叠4个全连接层,可以获得层数为 4 的神经网络。由于每层都是全连接层,所以又叫全连接网络。在设计全连接网络时,网络的结构配置等超参数可以按着经验法则自由设置,只需要遵循少量的约束即可。 例如, 隐藏层 1 的输入节点数需和数据的实际特征长度匹配,隐藏层3的输出层**函数和节点数需要根据任务的具体设定进行设计。神经网络模型的结构设计自由度较大,可以通过 AutoML 技术搜索出较优的网络结构。
四 优化目标
神经网络从输入到输出的计算过程叫做前向传播(Forward Propagation)或前向计算,前向传播的最后一步就是完成误差的计算,误差计算为:
其中
那么优化的目标为:
最小化优化问题一般采用误差反向传播(Backward Propagation,简称 BP)算法来求解网络参数。
五 **函数
与阶跃函数和符号函数不同,**函数都是平滑可导的,适合于梯度下降算法。
1. Sigmoid
表达式为:
图像为:
实现:
x = tf.linspace(-6.,6.,10) # 构造-6~6 的输入向量
y = tf.nn.sigmoid(x) # 通过 Sigmoid函数
作用:把输出x压缩到0到1的区间
2. ReLU
表达式:
ReLu=max(0,x)
图像为:
作用:Sigmoid 函数在输入值较大或较小时容易出现梯度值接近于 0 的现象, 使得参数无法更新,即梯度弥散现象,而ReLu可以改善这个情况。
实现:
y = tf.nn.relu(x) # 通过 ReLU **函数
3. LeakyReLU
表达式:
图像:
作用:ReLU函数在小于0时导数值恒为 0,也可能会造成梯度弥散现象,为了克服这个问
题,LeakyReLU函数被提出。P是自行设置的,使得当x小于0时,能够获得较小的导数值,避免梯度弥散。
实现:
y = tf.nn.leaky_relu(x, alpha=0.1) # 通过 LeakyReLU **函数
4. Tanh 函数
表达式为:
图像为:
作用:将输出x压缩到-1到1的区间,可通过Sigmoid平移实现.
实现:y = tf.nn.tanh(x) # 通过 tanh **函数
六 输出层设计
将根据输出值的区间范围来分类讨论。 常见的几种输出类型包括:
- 输出值范围为整个实数
一般用于预测。输出层可以不加**函数。 误差的计算直接基于最后一层的输出和真实值进行计算,比如均方差误差。
2.输出值范围为[0,1]
一般用于二分类问题或图像像素值。为让像素的值范围映射到[0,1]的有效实数空间,需要在输出层后添加合适**函数;为了能实现二分类,一般输出层可以只设置一个节点,并添加Sigmoid**函数,使得输出的值可以表示某个事件发生的概率。 - 每个输出值范围为[0,1],但输出值的总和为1。
一般用于多分类问题,在输出层x添加一个Softmax函数,使得输出层每个输出值都变成一个概率值,概率值最大时所对应的输出值就是要输出的类别。Softmax函数计算公式如下:
上述公式表示在输出层第j个输出值x_j经过Softmax函数以后可以变成一个概率值,越大说明该输出值所对应类别越有可能发生。 - 输出值范围为[-1,1]
六 误差计算
1.均方误差函数
均方差误差函数广泛应用在回归问题中, 实际上, 分类问题中也可以应用均方差误差函数。
实现:
o = tf.random.normal([2,10]) # 构造网络输出
y_onehot = tf.constant([1,3]) # 构造真实值
y_onehot = tf.one_hot(y_onehot, depth=10)
loss = keras.losses.MSE(y_onehot, o) # 计算每个样本的方差
loss = tf.reduce_mean(loss) # 计算均方差
2. 交叉熵误差函数
针对于分类问题所定义的误差函数,先引入信息学中的熵概念,熵越大,说明分类的不确定性越大,其熵的计算公式如下:
其中,P(i)是第i个输出值的概率,即输出值经过Softmax函数的概率值,
那么接下来,引入交叉熵的计算公式:
经过推导后,分类问题的交叉熵函数可以写为:
其中,y_i表示第i个输出值的真实类别,p_i表示第i个输出值经过Softmax函数计算得到的概率值。H(p||q)描述的是输出层的输出值的概率分布与真实值的概率分布之间的差距,因此,最小化交叉熵损失函数的过程实际上就是是最大化正确类别的预测概率的过程。
七 神经网络类型
1. 卷积神经网络CNN
主要应用于计算机视觉,即图片的理解,分析和识别,相比于全连接神经网络,卷积神经网络得益于局部相关性和权值共享的优势,实现网络参数量大幅度的下降,表现出较好的性能,比较流行的模型有用于图片分类的 AlexNet、 VGG、 GoogLeNet、 ResNet、 DenseNet。
2. 循环神经网络RNN
针对于序列信号的数据处理,其中最典型的就是文本处理,也就是自然语言处理。作为 RNN 的变种,LSTM较好地克服RNN 缺乏长期记忆、 不擅长处理长序列的问题,在自然语言处理中得到了广泛的应用。基于LSTM 模型, Google提出了用于机器翻译的 Seq2Seq 模型,并成功商用于谷歌神经机器翻译系统(GNMT)。其他的 RNN 变种还有 GRU、 双向 RNN 等。循环神经网络原理。
3. 注意力机制网络Transformer
2017 年, Google 提出了第一个利用纯注意力机制实现的网络模型Transformer,随后基于 Transformer 模型相继提出用于机器翻译的注意力网络模型,如 GPT、 BERT、 GPT-2 等。在其它领域,基于注意力机制,尤其是自注意力(Self-Attention)机制构建的网络也取得了不错的效果,比如基于自注意力机制的 BigGAN 模型。
4. 图卷积神经网络GCN
图片、 文本等数据具有规则的空间、时间结构,称为 Euclidean Data(欧几里德数据)。CNN和RNN能较好地处理这种数据,而对于像社交网络、蛋白质分子结构等不规则空间拓扑结构的数据,CNN和RNN有很大局限性。2016 年, Thomas Kipf 等人提出了图卷积网络(Graph Convolution Network, GCN)模型。随后,一系列的网络模型相继被提出,如 GAT, EdgeConv, DeepGCN 等。