人工智能——使一部机器像人一样进行感知、认知、决策、执行的人工程序或系统
深度学习的“不能”
算法输出不稳定,容易被“攻击”——发生微小变化,图像极易被改变
模型复杂度高,难以纠错和调试模型
层级复合程度高,参数不透明
端到端训练方式对数据依赖性强,模型增量差——样本数据量小时无法体现强大拟合能力
专注直观感知类问题,对开放性推理问题无能为力——鹦鹉与乌鸦推理能力
人类知识无法有效引入进行监督,机器偏见仍存在——种族歧视
深度学习准确性非常高,解释性非常差
连接主义+符号主义
浅层神经网络
激活函数
神经元继续传递信息、产生新连接的概率(超过阈值被激活,但不一定传递)
没有激活函数相当于矩阵相乘 多层和一层一样 只能拟合线性函数
单层感知器-多层感知器
单层感知器的结构和功能非常简单,包含两层:输入层(又称为感知层)和输出层(又称为处理层),是一种典型的前馈神经网络。
多层感知器是一种前向结构的 人工神经网络 ,映射一组输入向量到一组输出向量。遵循人类神经系统原理,学习并进行数据预测。它首先学习,然后使用权重存储数据,并使用算法来调整权重并减少训练过程中的偏差,即实际值和预测值之间的误差。主要优势在于其快速解决复杂问题的能力。
万有逼近定理
如果一个隐层包含足够多的神经元,三层前馈神经网络(输入-隐层-输出)能以任意精度逼近任意预定的连续函数。
双隐层感知器逼近非连续函数
当隐层足够宽时,双隐层感知器(输入-隐层1-隐层2-输出)可以逼
近任意非连续函数:可以解决任何复杂的分类问题。
神经网络每一层的作用
- 神经网络学习如何利用矩阵的线性变换加激活函数的非线性变换,
- 将原始输入空间投影到线性可分的空间去分类/回归。
- 增加节点数:增加维度,即增加线性转换能力。
- 增加层数:增加激活函数的次数,即增加非线性转换次数
神经网络的参数学习:误差反向传播
知乎上有一篇讲的很详细——神经网络的反向误差传播——学习笔记 - 知乎 (zhihu.com)
深层神经网络的问题:梯度消失
梯度消失也好,梯度爆炸也好,归根结底是由于层数的增加,多个项相乘,势必就会导致不稳定的情况。除非这些积能恰到好处的相等,才可以让不同层之间的学习速率相近。不过实际上,这几乎是不可能发生的。总之,只要我们使用基于梯度的学习算法,不同层的学习速率势必是有很大差距的。
从神经网络到深度学习
逐层预训练
对于现在神经网络的模型越来越大,参数越来越多,只用监督学习进行训练容易过拟合,容易收敛到局部最小。逐层预训练的意思就是先用无监督学习对每一层进行预训练, 然后用经过无监督训练的权值参数作为初始参数进行有监督训练,这样的话网络更容易收敛到最佳。
自编码器
自编码器一般是一个多层神经网络(最简单:三层):
训练目标是使输出层与输入层误差最小;
中间隐层是代表输入的特征,可以最大程度上代表原输入信号
最初被提出用来降维
堆叠自编码器 (stacked autoencoder, SAE) :
将多个自编码器得到的隐层串联;
所有层预训练完成后,进行基于监督学习的全网络微调
受限玻耳兹曼机 (RBM)
目的是让隐藏层得到的可见层v’与原来的可见层v分布一致,从而使隐藏层作为可见层输入的特征
两个方向权重w共享,偏置不同
受限制玻尔兹曼机(Restricted Bolzmann Machine, RBM)与自编码器(Autoencoder, AE)是神经网络的两种基本结构,两个结构都能起到降维的作用,都可以用来对神经网络进行预训练(pre-training),这种预训练都是无监督的。
关于这两种具体的还没有全部看完😂