概述
近年来随着计算机硬件的发展,神经网络作为机器学习中不可获取的一部分在预测、分类、图像分割、识别等方向得到了极其广的应用,然而其网络模型多,数学基础涉及广,使得其门槛较高。好在目前有诸如tensorflow、pytorch、sklearn等工具、拓展包的存在令各领域人员将更多的精力放在如何应用网络模型解决实际业务问题。然而虽不需要人工智能科学家那样扎实功底具备模型优化能力,仍需对整个神经网络有较直观的知识框架方能知道网络如何结合实际业务,调参也得知道各个参数大致什么意思有什么用,针对实际问题有哪些网络可以值得选择,当前这方面的研究进展才能了解其意义所在。
神经网络长什么样
人工神经网络(artificial neural network,缩写ANN),简称神经网络(neural network,缩写NN)或类神经网络,是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型,用于对函数进行估计或近似。
神经网络主要由:输入层,隐藏层,输出层构成。当隐藏层只有一层时,该网络为两层神经网络,由于输入层未做任何变换,可以不看做单独的一层。实际中,网络输入层的每个神经元代表了一个特征,输出层个数代表了分类标签的个数(在做二分类时,如果采用sigmoid分类器,输出层的神经元个数为1个;如果采用softmax分类器,输出层神经元个数为2个),而隐藏层层数以及隐藏层神经元是由人工设定。一个基本的三层神经网络可见下图:
神经网络本质
在Michael Nielsen大神的著作 Neural Networks and Deep Learning的chapter 4: A visual proof that neural nets can compute any function,他论证了在通用逼近理论(universal approximation theorem)的作用下,只要神经网络足够大(隐层神经元足够多),它可以逼近任意函数(can compute any function)。
机器学习,实际上是寻找一种数学模型,让这个模型符合它所要描述的对象。比如说我们要寻找一个能区分出Figure 1中蓝色和橙色点的模型,用它可以区分现有的以及未来可能新增的点,这个数学模型就是图中的白线,即ax + b = y,只要计算出a和b,就可以用函数ax + b来解决Figure 1的分类问题。
理论上说,神经网络可以逼近任意函数,即找到解决任何难题对应的数学模型,而且隐层的神经元数越多就越逼近目标函数。
神经网络特点
1.并行分布式处理 神经网络具有高度的并行结构和并行实现能力,具有高速寻找优化解的能力,能够发挥计算机的高速运算能力,可能很快找到优化解。
2.非线性处理 人脑的思维是非线性的,故神经网络模拟人的思维也应是非线性的。这一特性有助于处理非线性问题。
3.具有自学习功能 通过对过去的历史数据的学习,训练出一个具有归纳全部数据的特定的神经网络,自学习功能对于预测有特别重要的意义。
4.神经网络的硬件实现 要使人工神经网络更快、更有效地解决更大规模的问题,关键在于其超大规模集成电路(V LSI)硬件的实现,即把神经元和连接制作在一块芯片上(多为CMOS)构成ANN,神经网络的VLSI设计方法近年来发展很快,硬件实现已成为ANN的一个重要分支。
神经网络领域
近些年来神经网络在众多领域得到了广泛的运用。在民用应用领域的应用,如语言识别、图像识别与理解、计算机视觉、智能机器人故障检测、实时语言翻译、企业管理、市场分析、决策优化、物资调运、自适应控制、专家系统、智能接口、神经生理学、心理学和认知科学研究等等;在军用应用领域的应用,如雷达、声纳的多目标识别与跟踪,战场管理和决策支持系统,军用机器人控制各种情况、信息的快速录取、分类与查询,导弹的智能引导,保密通信,航天器的姿态控制等。
基本概念
了解神经网络就要了解与神经网络相关的一些概念,才能看懂相关的论文。
-
神经元
神经元就是当h大于0时输出1,h小于0时输出0这么一个模型,它的实质就是把特征空间一切两半,认为两瓣分别属两个类。这个模型有点像人脑中的神经元:从多个感受器接受电信号 ,进行处理(加权相加再偏移一点,即判断输入是否在某条直线 的一侧),发出电信号(在正确的那侧发出1,否则不发信号,可以认为是发出0),这就是它叫神经元的原因。 -
容量、过拟合、欠拟合
-
泛化
机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好,而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为泛化(generalization)。 -
容量
通过调整模型的容量(capacity),我们可以控制模型是否偏向于过拟合或者欠拟合。通俗地,模型的容量是指其拟合各种函数的能力。 容量低的模型可能很难拟合训练集。 容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。 -
过拟合
过拟合是指训练误差和和测试误差之间的差距太大。 -
欠拟合
欠拟合是指模型不能在训练集上获得足够低的误差。
-
正则化
-
超参数
大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的(尽管我们可以设计一个嵌套的学习过程,一个学习算法为另一个学习算法学出最优超参数)。 -
参数范数惩罚
许多正则化方法通过对目标函数 J 添加一个参数范数惩罚 Ω(θ), 限制模型(如神经网络、 线性回归或逻辑回归)的学习能力。 当我们的训练算法最小化正则化后的目标函数 J~ 时,它会降低原始目标 J 关于训练数据的误差并同时减小在某些衡量标准下参数 θ(或参数子集)的规模。选择不同的参数范数 Ω 会偏好不同的解。 -
bagging
Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术(Breiman, 1994)。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。这是机器学习中常规策略的一个例子,被称为模型平均(modelaveraging)。采用这种策略的技术被称为集成方法。 -
dropout
Dropout (Srivastava et al., 2014) 提供了正则化一大类模型的方法,计算方便但功能强大。在第一种近似下,Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。Dropout提供了一种廉价的Bagging集成近似,能够训练和评估指数级数量的神经网络。 -
优化
-
病态
在优化凸函数时,会遇到一些挑战。这其中最突出的是 Hessian 矩阵 H 的病态。这是数值优化、 凸优化或其他形式的优化中普遍存在的问题 病态问题一般被认为存在于神经网络训练过程中。 病态体现在随机梯度下降会‘‘卡’’ 在某些情况,此时即使很小的更新步长也会增加代价函数。 -
局部极小值
对于非凸函数时,如神经网络,有可能会存在多个局部极小值。事实上,几乎所有的深度模型基本上都会有非常多的局部极小值。 -
模型可辨认性
如果一个足够大的训练集可以唯一确定一组模型参数,那么该模型被称为可辨认的。带有潜变量的模型通常是不可
辨认的,因为通过相互交换潜变量我们能得到等价的模型。 -
悬崖
多层神经网络通常存在像悬崖一样的斜率较大区域,如