说明:本文以机器学习中最基本的分类网络为背景,介绍神经网络的基本结构;基本只需要知道这些基本组成便可以着手具体的项目代码,而一些特殊的网络组成,只需遇到时自行搜索学习即可。

传统k-近邻(KNN)算法:

  • 问:绿色是属于方块还是三角?——取决于 k。

  • 算法流程:

    • (1)计算已知类别数据集中的点与当前点的距离,并依次排序
    • (2)选取与当前点距离最小的 k 个点,并确定类别;
    • (3)返回前 k 个点出现频率最高的类别作为预测。

设计网络需要考虑

  • 数据的预处理与初始化如何更高效?
  • 网络结构:隐藏层层数、每层神经元个数?
  • 损失函数?正则化项?
  • 优化策略?

(全连接)神经网路

数据预处理和参数初始化

  • 一般对输入数据进行预处理或归一化(例如映射到 $[0,1]$ 范围内),再作为网络输入;
  • 对网络参数初始化时进行随机初始化(尽量浮动小一些,类似初始学习率也取很小)。

线性函数(得分函数)

​ 假设分类有10个类别,权重和偏移分别为 $W\in\mathbb{R}^{10\times d},b\in\mathbb{R}^{10},x\in\mathbb{R}^d$,得分函数即为

相当于每个类别、每个像素点对应不同参数权重。

​ 事实上,这个权重 $W$、偏移 $b$ 是上面网络中层与层之间连线部分计算的线性部分:从某一层输出,经过线性变换之后作为下一层的输入。

激活函数

目的:如果只是一直的线性变换,那只是简单的线性拟合,无法应对非线性数据;

方法:经过上述线性变换后,在传输到下一组神经元之前,进行非线性变换,也即激活。事实上这个激活函数就是上面每层网络中的圆圈部分。下面是两个最常用的两种激活函数:

损失函数

​ 用于监督与反向传播,衡量计算当前得分的权重的好坏,例如这里 :

后面 $\lambda R(W)$ 为正则项,是为了削减过拟合。

$softmax$ 分类器

从而计算损失,如图中取的是交叉熵,因为概率越靠近1,损失越小。

反向传播(可微)

​ 链式法则逐层计算偏导,从网络的输出反向进行到网络的输入,以进行后续的优化,例如梯度下降法

Drop-out

​ 为了削弱过拟合部分,随机在某些训练步内失活一定的神经元:

卷积神经网络

卷积层

目的:增加关联性,考虑到像素与周围像素是有关联性的;

策略:利用卷积块作为权重参数对指定大小的像素块做加权组合;注意,每个颜色通道是单独做卷积。

边缘填充,是因为边界在做卷积时,边缘只计算一次,但是内部可能计算多次,为了平衡重要性,在边缘添加一圈0。

池化层

效果:卷积一定层后,可能发生维度爆炸,利用池化层降低维度。

特征图变化

感受野

​ 可以看到,到第二个卷积层后,一个像素块已经感受到了周围像素块的关联性。

(可跳过)下面的经典网络只是学习时候遇见,罗列在此。

经典网络

VGG

Resnet 残差网络

递归神经网络

  • 保留上一步时间的特征,和下一时间特征一起输入到下一层;

  • 一般只选择最后一层输出结果。

LSTM