专家知识(人工规则)
机器学习 ≈ \approx ≈ 构建一个映射函数(规则)
样本特征 ⟺ \iff ⟺ 表示
机器学习流程:
特征工程(feature engineering)——人工处理
数据预处理:对于数据缺失多的特征,弃用
特征提取:提取有效特征,隐含特征也需提取
特征转换:某些冗余特征及有相关性特征,弃用或组合,形成更有效特征
浅层学习:不涉及特征学习,其特征主要靠人工经验或特征转换的方法抽取
特征选择 是选取原始特征集合的一个有效子集,使得基于这个特征子集训练出来的模型准确率最高
子集搜索:假设原始特征数为 D D D ,则共有 2 D 2^D 2D 个候选子集。特征选择的目标就是选择一个最优的候选子集
常用贪心搜索策略:由空集合开始,每一轮添加该轮最优的特征,称为前向搜索(Forward Search);或者从原始特征集合
开始,每次删除最无用的特征,称为反向搜索(Backward Search).
不依赖具体机器学习模型的特征选择方法
每次增加最有信息量的特征,或删除最没有信息量的特征
特征的信息量可以通过信息增益(Information Gain)来衡量,即引入特征后条件分布 p θ ( y ∣ x ) p_\theta(y\vert x) pθ(y∣x) 的不确定性(熵)的减少程度
使用后续机器学习模型的准确率作为评价来选择一个特征子集的方法
每次增加对后续机器学习模型最有用的特征,或删除对后续机器学习任务最无用的特征.
L 1 L_1 L1 正则化会导致稀疏特征,间接实现了特征选择
构造一个新的特征空间,并将原始特征投影在新的空间中得到新的表示
抽取对一个特定的预测任务最有用的特征
和具体任务无关,其目标通常是减少冗余信息和噪声
用较少的特征表示原始特征中的大部分信息,去掉噪声信息,并进而提高计算效率和减小维度灾难
底层特征 与 高层语义
人们对文本、图像的理解(高层语义)无法从字符串或者图像的底层特征(底层特征)直接获得
好的表示
数据表示是机器学习的核心问题
局部表示
一个语义由一个量表示
离散表示
One-Hot向量
符号表示
分布式表示
一个语义由多个量共同表示
理解:
k k k 个维度
局部表示:单个维度代表语义
k k k 个语义
分布式表示:所有维度加起来代表语义
2 k 2^k 2k 个语义
局部表示:配合知识库、规则使用
分布式表示:嵌入:压缩、低维、稠密
通常情况:将局部表示映射为分布式表示
通过构建模型,让其自动学习好的特征(底层特征、中层特征、高层特征),从而最终提升预测或识别的准确性
传统特征提取
线性投影(子空间)
PCA、LDA
非线性嵌入
LLE、Isomap、谱方法
自编码
区别:
特征提取:基于任务或 先验 去除无用特征
自设标准,对任务影响是好是坏并不确定,实质上也是一种特征工程
表示学习:通过深度模型学习高层语义特征
难点:没有明确目标
一个好的表示学习策略必须具备一定深度 ,指原始数据进行非线性特征转换的次数
深度学习 = 表示学习 + 决策 ( 预测 ) 学习 ⏟ 浅层学习 深度学习=表示学习+\underbrace{决策(预测)学习}_{浅层学习} 深度学习=表示学习+浅层学习 决策(预测)学习
核心问题是:贡献度分配问题
即一个系统中不同的组件(component)或其参数对最终系统输出结果的贡献或影响
对于一般的深度学习,解决贡献度分配问题用 神经网络
整个学习过程中,没有人为干预
指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标
传统机器学习方法 需要将一个任务的输入和输出之间人为地切割成很多子模块(或多个阶段),每个子模块分开学习
问题:
y = f ( x ) 浅层学习 ⇓ y = f 2 ( f 1 ( x ) ) ⇓ ⋮ ⇓ y = f K ( f K − 1 ⋯ ( f 1 ( x ) ) ) 深度学习 \begin{array}{c|l} y=f(x)&浅层学习\\ \Downarrow\\ y=f^2(f^1(x))\\ \Downarrow\\ \vdots\\ \Downarrow\\ y=f^{K}(f^{K-1}\cdots(f^1(x)))&深度学习\\ \end{array} y=f(x)⇓y=f2(f1(x))⇓⋮⇓y=fK(fK−1⋯(f1(x)))浅层学习深度学习
f ( x ) f(x) f(x) 为非线性函数,不一定连续
当 f 1 ( x ) f^1(x) f1(x) 连续时,如 f l ( x ) = σ ( W ( l ) f l − 1 ( x ) ) f^l(x)=\sigma(W^{(l)}f^{l-1}(x)) fl(x)=σ(W(l)fl−1(x)) ,这个复合函数称为神经网络
左半球:对语言的处理和语法表示
右半球:空间技巧
神经元:多个突触
数量确定,不会增加
神经元之间的联系会增加
负责传递,存储,加工信息,控制行为,情感
神经细胞在通过树突接收到的信号强度超过某个阈值时,就会进入激活状态,并通过轴突向上层神经细胞发送激活信号
人类所有与意识和智能相关的活动,都是通过特定区域神经细胞间的相互激活协同工作而实现的
神经元之间传递信:电信号
通过树突汇聚信息,当信息汇聚到一定强度达到阈值,神经细胞就会兴奋
感觉神经元仅对其敏感的事物属性作出反应,
感觉属性检测是一类将数值信息转化为符号信息的定性操作
感觉将事物属性转化为感觉编码,不仅能让大脑检测到相应属性,还在事物属性集与人脑感觉记忆集之间建立起对应关系,所以感觉属性检测又叫 感觉定性映射 。
神经网络对来自神经元的 各种简单映像加以组合,得到的就是关于 整合属性的感觉映像
在感觉映射下,事物属性结构与其感觉映像结构之间应保持不变 ,感觉映像应该是树屋属性集与其感觉记忆集之间的一个同态映像。
表征处理的物质基础是神经元,大量神经元群体的同步活动是实现表征和加工的生理学机制
从信息科学的角度 ,整个加工过程可以理解为多次特征提取,提取出的特征从简单到复杂,甚至“概念”这种十分抽象的特征也可以被提取出来。
作为一个复杂的多级系统,大脑思维来源于功能的逐级整合。
但在逐级整合的过程中,每一个层次上实现的都是 1 + 1 > 2 1+1>2 1+1>2 的效果,在较高层次上产生了较低层次的每个子系统都不具备的 突出功能
认知还和注意、情绪等系统有着极强的交互作用
人类智能的本质取决于 什么是认知的基本单元
目前的理论和实验表明,分析的有效手段是设计科学实验加以验证
结论:认知基本单元是知觉组织形成的 “知觉物体”
从物质基础的角度看,**人类智能 **是建立在有机物基础上的 碳基智能,而 人工智能 是建立在无机物基础上的 硅基智能
碳基智能与硅基智能的本质区别在于架构 ,架构决定了数据的传输与处理是否能够同时进行
硅基:数据的传输与处理无法同步进行
基于冯·诺依曼结构体系的计算机核心特征是运算单元和存储单元是分离的,两者有数据总线连接。运算单元需要从数据总线接收来自存储单元的数据,运算完成后再将运算结果通过数据总线传回给存储单元
在大脑中,数据的传输和处理由突触和神经元之间的交互完成。且数据的传输和处理是同步进行的
人的记忆过程也不仅仅是数据存储的过程,还伴随着去粗取精的提炼与整合。
数据是为了在需要时能够快速提取而存储 ——存储的作用是为了提升数据处理的有效性
当下人工智能的主要研究方法是连接主义,连接主义认为智能建立在神经生理学和认知科学基础上
强调智能活动是将大量简单的单元通过复杂方式相互连接后并行运行的结果
连接主义通过人工构建神经网络方式模拟人类智能。
以工程技术手段 模拟人类神经系统的结构和功能,通过大量的 非线性并行处理器模拟 人脑中众多的 神经元,用处理器的连接关系模拟人脑神经元间的突触行为
人工神经网络 (Neural Network)指一系列受生物学和神经科学启发的数学模型
这些模型主要是通过对人脑的神经元网络进行抽象,构建人工神经元,并按照一定的拓扑结构来建立人工神经元之间的链接
神经网络是一种 大规模的并行分布式处理器 ,天然具有存储并使用经验知识的能力。从两个方面提取大脑:
分布式并行处理器(20世纪80年代中后期,最流行的一种连接主义模型)
早期模型强调模型的生物学合理性,后期更关注对某种特定认知能力的模拟(物体识别,语言理解)等
在引入 误差反向传播 来改进学习能力后,神经网络也越来越多地应用在各种机器学习任务上,即作为一种机器学习模型的神经网络
从机器学习角度,神经网络一般可以看做一个非线性模型,其基本组成单元为具有非线性激活函数的神经元,通过大量神经元之间的连接,使得神经网络成为一种高度非线性的模型。神经元之间的连接权重就是需要学习的参数,可以使用梯度下降法来进行学习
1943 年,美国芝加哥大学的神经科学家沃伦·麦卡洛克和他的助手沃尔特·皮茨发表了论文《神经活动中思想内在性的逻辑演算》(A Logical Calculus of Ideas Immanent in Nervous Activity), 标志着人工神经网络的诞生
MP神经元 接受一个或多个输入,并对输入的线性加权进行非线性处理以产生输出
在MP神经元中 输入和输出 都限定为二进制信号
假设一个神经元接收 D D D 个输入 x 1 , x 2 , ⋯ , x D x_1,x_2,\cdots,x_D x1,x2,⋯,xD ,令向量 x = [ x 1 ; x 2 ; ⋯ ; x D ] x=[x_1;x_2;\cdots;x_D] x=[x1;x2;⋯;xD] 来表示这组输入,并用 净输入 z ∈ R z\in \R z∈R 表示一个神经元所获得的输入信号 x x x 的加权和
z = ∑ d = 1 D ω d x d + b = ω T x + b z=\sum\limits_{d=1}^D\omega_dx_d+b=\omega^Tx+b z=d=1∑Dωdxd+b=ωTx+b
其中 ω = [ ω 1 ; ω 2 ; ⋯ ; ω D ] ∈ R \omega=[\omega_1;\omega_2;\cdots;\omega_D]\in \R ω=[ω1;ω2;⋯;ωD]∈R 是D维的权重向量, b ∈ R b\in \R b∈R 是偏置
净输入 z z z 在经过一个非线性函数 f ( ⋅ ) f(\cdot) f(⋅) 后,得到神经元的活性值 α = f ( z ) \alpha=f(z) α=f(z) ,其中非线性函数 f ( ⋅ ) f(\cdot) f(⋅) 称为 激活函数
MP神经元使用的激活函数是符号函数:以预先设定的阈值作为参数:当输入大于阈值,输出1;反之输出0
激活函数分类0.4.6
MP神经元的工作形式类似与数字电路中的逻辑门
核心观点是 学习过程主要是通过神经元之间突触的形成和变化来实现
赫布理论 给出了改变模型神经元之间权重的准则
赫布理论并不能用于改善MP神经元,因为MP神经元中的权重 ω i \omega_i ωi 都是固定不变的,不能做出动态调整
知识存储在人脑之间的神经元连接上
记忆
短期记忆转化为长期记忆的过程称为凝固作用
神经网络天然不是深度学习,但是 深度学习天然是神经网络
y = f 3 ( f 2 ( f 1 ( x ) ) ) y=f^{3}(f^{2}(f^1(x))) y=f3(f2(f1(x)))
人工神经网络主要由大量的神经元以及它们之间的有向连接构成
神经元间的激活规则
非线性函数
网络结构
学习算法:通过训练数据来学习神经网络的参数
通过一定的连接方式或信息传递方式进行协作的神经元可以看作一个网络,就是神经网络.
前馈网络
各个神经元按接收信息的先后分为不同的组。
每一组可以看作一个神经层,每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元
整个网络中的信息是朝一个方向传播,没有反向的信息传播,可以用一个有向无环路图表示
可以看做非线性函数的多次复合,实现输入空间到输出空间的复杂映射
记忆网络(反馈网络)
网络中神经元不但可以接收其他神经元的信息,也可以接收自己的历史信息
记忆网络中的神经元具有记忆功能,在不同的时刻具有不同的状态——记忆
记忆神经网络中的信息传播可以是单向或双向传递,可以用一个有向循环图或无向图表示
可以看做一个程序,具有更强的计算和记忆能力
改进:增强记忆网络的记忆容量,引入外部记忆单元和读写机制——记忆增强网络
图网络
前馈网络和记忆网络的输入都可以表示为向量或向量序列
实际应用中图结构的数据很多,如(知识图谱、社交网络、分子网络),前馈网络和记忆网络很难处理图结构的数据
图网络是定义在图结构数据上的神经网络,图中每个节点都由一个或一组神经元构成
节点之间的链接可以有向或无向,都可以接收来自邻接节点或自身结点的信息
偏导数
∂ y ∂ ω l = y ( ω l + Δ ω ) − y ( ω l ) Δ ω \frac{\partial y}{\partial \omega^{l}}=\frac{y(\omega^l+\Delta \omega)-y(\omega^l)}{\Delta \omega} ∂ωl∂y=Δωy(ωl+Δω)−y(ωl)
若某个参数 ω i \omega^i ωi 对结果很重要,则该参数有微小扰动,对于结果 y y y 的影响也会很大,贡献度也会很大
第一阶段:模型提出
第二阶段:冰河期
第三阶段:反向传播算法引起的复兴
第四阶段:流行度降低
第五阶段:深度学习的崛起
sigmod型函数指一类 S 型曲线函数,为两端饱和函数
饱和:对于函数 f ( x ) f(x) f(x) ,若 x → − ∞ x\rightarrow -\infty x→−∞ ,其导数 f ′ ( x ) → 0 f'(x)\rightarrow 0 f′(x)→0 ,则称其为左饱和;若 x → + ∞ x\rightarrow +\infty x→+∞ ,其导函数 f ′ ( x ) → 0 f'(x)\rightarrow 0 f′(x)→0 ,则称其为右饱和
σ ( x ) = 1 1 + e − x ∈ ( 0 , 1 ) \sigma(x)=\frac{1}{1+e^{-x}}\in(0,1) σ(x)=1+e−x1∈(0,1)
当输入值在 0 0 0 附近时,Sigmoid 型函数近似为线性函数;当输入值靠近两端时,对输入进行抑制.输入越小,越接近于 0 0 0 ;输入越大,越接近于 1 1 1
非零中心化的输出(Logistic函数),会使其后一层的神经元输入发生偏置偏移,并进一步使得梯度下降的收敛速度变慢
假设:
y = f ( ω ⋅ σ ( x ) ) ∂ y ∂ ω = f ′ ( ) σ ( x ) y=f(\omega\cdot \sigma(x))\\ \frac{\partial y}{\partial \omega}=f'()\sigma(x) y=f(ω⋅σ(x))∂ω∂y=f′()σ(x)
由于 σ ( x ) \sigma(x) σ(x) 非负,其后一层神经元梯度要么全正,要么全负( f ′ ( ) f'() f′() 决定)
梯度下降效率变低,一次只能朝着某一方向向最优梯度下降,其余梯度为零
t a n h ( x ) = e x − e − x e x + e − x ∈ ( − 1 , 1 ) = 2 σ ( 2 x ) − 1 \begin{aligned} tanh(x)&=\frac{e^x-e^{-x}}{e^x+e^{-x}}\in (-1,1)\\ &=2\sigma(2x)-1 \end{aligned} tanh(x)=ex+e−xex−e−x∈(−1,1)=2σ(2x)−1
Logistic函数和TanH函数都是Sigmod型函数,但由于饱和性,计算开销比较大。
可以通过分段函数来近似中间的线性部分
在0附近1阶泰勒展开,
g l ( x ) ≈ σ ( 0 ) + x σ ′ ( x ) = 0.25 x + 0.5 \begin{aligned} g_l(x)&\approx\sigma(0)+x\sigma'(x)\\ &=0.25x+0.5 \end{aligned} gl(x)≈σ(0)+xσ′(x)=0.25x+0.5
h a r d − l o g i s t i c ( x ) = { 1 g l ( x ) ≥ 1 g l ( x ) 0 < g l ( x ) < 1 0 g l ( x ) ≤ 0 = max ( min ( g l ( x ) , 1 ) , 0 ) = max ( min ( 0.25 x + 0.5 , 1 ) , 0 ) \begin{aligned} hard-logistic(x)&=\begin{cases} 1&g_l(x)\ge 1\\ g_l(x)&0
g t ( x ) ≈ tanh ( 0 ) + x tanh ′ ( x ) = x \begin{aligned} g_t(x)&\approx\tanh(0)+x\tanh'(x)\\ &=x \end{aligned} gt(x)≈tanh(0)+xtanh′(x)=x
h a r d − t a n h ( x ) = { 1 g t ( x ) ≥ 1 g t ( x ) − 1 < g t ( x ) < 1 − 1 g t ( x ) ≤ − 1 = max ( min ( g t ( x ) , 1 ) , − 1 ) = max ( min ( x , 1 ) , − 1 ) \begin{aligned} hard-tanh(x)&=\begin{cases} 1&g_t(x)\ge 1\\ g_t(x)&-1
修正线性单元,也叫 Rectifier 函数,是目前深度神经网络中常用的激活函数
R e L U ( x ) = { x x ≥ 0 0 x < 0 = max ( 0 , x ) \begin{aligned} ReLU(x)&=\begin{cases} x&x\ge 0\\ 0&x<0 \end{cases}\\ &=\max(0,x) \end{aligned} ReLU(x)={x0x≥0x<0=max(0,x)
优点
计算高效:采用ReLU 的神经元只需要进行加、乘和比较的操作
具有生物学合理性:在生物神经网络中,同时处于兴奋状态的神经元非常稀疏。
sigmod会导致一个非稀疏的神经网络
ReLU具有很好的稀疏性,大约 50 % 50\% 50% 的神经元处于激活状态——单侧抑制、宽兴奋边界
在一定程度上缓解了神经网络的梯度消失问题:ReLU函数为左饱和函数,且在 x > 0 x>0 x>0 时,导数为 1 1 1 ,加速梯度下降的收敛速度
缺点
在输入 x < 0 x<0 x<0 时,保持一个很小的梯度 γ \gamma γ
当神经元非激活时,也能有一个非零的梯度可以更新参数,避免永远不能被激活
L e a k y R e L U ( x ) = { x x > 0 γ x x ≤ 0 = max ( 0 , x ) + γ min ( 0 , x ) \begin{aligned} LeakyReLU(x)&=\begin{cases} x&x>0\\ \gamma x&x\le 0 \end{cases}\\ &=\max(0,x)+\gamma\min(0,x) \end{aligned} LeakyReLU(x)={xγxx>0x≤0=max(0,x)+γmin(0,x)
γ \gamma γ 通常为很小的常数,如 γ = 0.01 \gamma=0.01 γ=0.01 ,带泄露的 ReLU也可以写成
L e a k y R e L U ( x ) = max ( x , γ x ) LeakyReLU(x)=\max(x,\gamma x) LeakyReLU(x)=max(x,γx)
引入一个可学习的参数,不同神经元可以有不同的参数
对于第 i i i 个神经元,其PReLU定义为
P R e L U i ( x ) = { x x > 0 γ i x x ≤ 0 = max ( 0 , x ) + γ i min ( 0 , x ) \begin{aligned} PReLU_i(x)&=\begin{cases} x&x>0\\ \gamma_i x&x\le 0 \end{cases}\\ &=\max(0,x)+\gamma_i\min(0,x) \end{aligned} PReLUi(x)={xγixx>0x≤0=max(0,x)+γimin(0,x)
P R e L U PReLU PReLU 是非饱和函数,允许不同的神经元有不同的参数,也可以共享一个参数
近似的零中心化的非线性函数
E L U ( x ) = { x x > 0 γ ( e x − 1 ) x ≤ 0 = max ( 0 , x ) + min ( 0 , γ ( e x − 1 ) ) \begin{aligned} ELU(x)&=\begin{cases} x&x>0\\ \gamma(e^x-1)&x\le 0 \end{cases}\\ &=\max(0,x)+\min(0,\gamma(e^x-1)) \end{aligned} ELU(x)={xγ(ex−1)x>0x≤0=max(0,x)+min(0,γ(ex−1))
γ ≥ 0 \gamma\ge 0 γ≥0 是一个超参数,决定 x ≤ 0 x\le 0 x≤0 时的饱和曲线,并调整输出均值在0附近
可以看做ReLU的平滑版本
S o f t p l u s ( x ) = log ( 1 + e x ) Softplus(x)=\log(1+e^x) Softplus(x)=log(1+ex)
其导数刚好为 L o g i s t i c Logistic Logistic 函数
自门控激活函数(软门控——允许信息通过的多少 σ ( x ) ∈ { 0 , 1 } \sigma(x)\in\{0,1\} σ(x)∈{0,1})
s w i s h ( x ) = x σ ( β x ) swish(x)=x\sigma(\beta x) swish(x)=xσ(βx)
其中 σ ( ⋅ ) \sigma(\cdot) σ(⋅) 为 L o g i s t i c Logistic Logistic 函数, β \beta β 为可学习的参数或一个固定的超参数
Swish函数可以看做线性函数和ReLU函数之间的非线性插值,其程度由 β \beta β 控制
β = 0 \beta=0 β=0 时,Swish函数变为线性函数 x 2 \frac{x}{2} 2x
β = 1 \beta=1 β=1 时,
x > 0 x>0 x>0 时,近似线性
x < 0 x<0 x<0 时,近似饱和,具有一定单调性
β → + ∞ \beta\rightarrow +\infty β→+∞ 时, σ ( β x ) \sigma(\beta x) σ(βx) 趋向于离散的 0 − 1 0-1 0−1 函数
高斯误差线性单元,与Swish函数类似
G E L U ( x ) = x P ( X ≤ x ) , X ∼ N ( μ , σ 2 ) GELU(x)=xP(X\le x),X\sim \mathcal{N}(\mu,\sigma^2) GELU(x)=xP(X≤x),X∼N(μ,σ2)
其中, μ , σ \mu,\sigma μ,σ 为超参数,一般设 μ = 0 , σ = 1 \mu=0,\sigma=1 μ=0,σ=1
P ( X ≤ x ) P(X\le x) P(X≤x) 为高斯分布的累计函数,为S型函数,可以用 L o g i s t i c Logistic Logistic 函数或 T a n h Tanh Tanh 函数近似
G E L U ( x ) ≈ 0.5 x [ 1 + tanh ( 2 π ( x + 0.044715 x 3 ) ) ] G E L U ( x ) ≈ x σ ( 1.702 x ) GELU(x)\approx 0.5x\left[1+\tanh\left(\frac{2}{\pi}(x+0.044715x^3)\right)\right]\\ GELU(x)\approx x\sigma(1.702x) GELU(x)≈0.5x[1+tanh(π2(x+0.044715x3))]GELU(x)≈xσ(1.702x)
Maxout单元也是一种S型分段线性函数
Maxout单元的输入是上一层神经元的全部原始输出, x = [ x 1 ; x 2 ; ⋯ ; x D ] x=[x_1;x_2;\cdots;x_D] x=[x1;x2;⋯;xD]
每个Maxout单元有 K K K 个权重向量 ω k ∈ R D \omega_k\in \R^D ωk∈RD 和偏置 b k ( 1 ≤ k ≤ K ) b_k(1\le k\le K) bk(1≤k≤K) ,对于输入 x x x ,可以得到 K K K 个净输入 z k z_k zk
z k = ω k x + b k , ω k = [ ω k ( 1 ) , ω k ( 2 ) , ⋯ , ω k ( D ) ] z_k=\omega_kx+b_k,\omega_k=\left[\omega_{k}^{(1)},\omega_k^{(2)},\cdots,\omega_k^{(D)}\right] zk=ωkx+bk,ωk=[ωk(1),ωk(2),⋯,ωk(D)]
Maxout单元的非线性函数定义为
m a x o u t ( x ) = max k ∈ [ 1 , K ] ( z k ) maxout(x)=\max\limits_{k\in [1,K]}(z_k) maxout(x)=k∈[1,K]max(zk)
Maxout单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系
Maxout激活函数可以看做任意凸函数的分段线性近似