【机器学习】莫烦

机器学习方法

1.1 机器学习(Machine Learning)

  • 监督学习(supervised learning)
    • 有标签的数据
  • 非监督学习(unsupervised learning)
    • 无标签的数据
  • 半监督学习(semi-supersived learning)
    • 少量有标签的样本
    • 大量无标签的样本
  • 强化学习(reinforcement learning)
    • 只给机器人篮球和篮筐,让机器人自己尝试各种方法,投篮命中则进行奖励(Alpha Go)
  • 遗传算法(genetic algorithm)
    • 淘汰弱者,在强者的基础上再次进行学习(马里奥通关)

神经网络

2.1 人工神经网络 vs 生物神经网络

生物神经网络

  • 人有900亿个神经元
  • 通过刺激,产生新的联结,让信号能够通过新的联结传递而形成反馈

人工神经网络

  • 通过正向和反向传播来更新神经元

2.2 神经网络(Neural Network)

  • 输入层
  • 隐藏层(1~N层)
  • 输出层

激活函数

TLDR(or the take-away)

26中激活函数及其导数的图像

  • 优先使用 ReLU,但要注意初始化和Learning Rate的设置
  • 遇到多个Dead ReLU,可以考虑使用Leaky ReLU(P-ReLU,R-ReLU),ELU或者Maxout
  • 不建议使用tanh,尤其是sigmoid

 

  • sigmoid

  

  缺点1:在深度神经网络中梯度反向传递时导致梯度爆炸(小概率)和梯度消失(大概率)

  缺点2:sigmoid的输出不是0均值,最终使得收敛缓慢。(按照batch训练,由于不同batch接收的信号不同,可以缓解这个问题)

  缺点3:解析式中含有幂运算,计算耗时,增加训练时间

  • tanh

  

  优点1:解决了sigmoid函数的非0均值问题

  缺点1:梯度消失

  缺点2:幂运算

  • ReLU(Rectified Linear Unit)

  

  优点1:解决了gradient vanishing问题(正区间)

  优点2:计算速度快(只需要判断是否大于0)

  优点3:收敛速度远快于sigmoid 和tanh

  缺点1:relu的输出不是0均值

  缺点2:Dead ReLU Problem(某些神经元可能永远不会被激活,导致相应的参数永远不能被更新)

    原因1:非常不幸的参数初始化(小概率)

    原因2:Learning Rate 太高导致训练过程中参数更新太大

    解决1:采用Xavier 初始化方法

    解决2:避免将Learning Rate 设置太大

    解决3:使用adagrad 等自动调节Learning Rate 的算法

  • Leaky ReLU

   

  通常 α = 0.01

  优点:解决了ReLU的Dead ReLU Problem,理论上好于ReLU,但实际中并没有好的证据表明Leaky ReLU总是优于ReLU

    • P-ReLU(Parametric ReLU)

      训练α:参考Kaiming He的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》

    • R-ReLU(Randomized ReLU)

      随机α:首次试在 kaggle 的NDSB 比赛中被提出的

  • ELU(Exponential Linear Units)

   

  优点1:不会有Dead ReLU Problem,理论上好于ReLU,但实际中并没有好的证据表明ELU总是优于ReLU

  优点2:输出的均值接近0(zero-centered)

  缺点:计算量稍大

  • MaxOut

  参考Goodfellow的论文《maxout networks》(ICML2013)

参考资料

常用激活函数(激励函数)理解与总结

聊一聊深度学习的activation function

2.3 卷积神经网络 CNN(Convolutional Neural Network)

擅长领域:图片识别和语言识别

扩展领域:视频分析、自然语言处理、药物发现

具体应用:alpha go

 

卷积操作:通过批量过滤器,对一小块区域进行处理,形成边缘信息

神经网络的作用:从边缘信息里面总结出更高层的信息结构(眼睛,鼻子,嘴)

 

网络结构:LeNet-5,AlexNet

简单的CNN:image -> convolution -> max pooling -> convolution -> max pooling -> fully connected -> fully connected -> classifier

 

2.4 循环神经网络 RNN(Recurrent Neural Network)

擅长工作:处理序列数据

具体应用:描述照片,写论文,写脚本,作曲

 

常规结构

 

分类问题

 

图片描述

 

语言翻译

 

参考资料

RNN作曲

 

2.5 LSTM RNN 循环神经网络(LSTM,Long Short-Term Memory)

RNN的问题:无法回忆起久远记忆(反向传播过程中出现误差的梯度消失/梯度爆炸问题)

 

 LSTM的结构:输入控制+忘记控制+输出控制

  • 输入控制按照风险剧情的重要程度,写入主线剧情
  • 忘记控制将之前不重要的主线剧情进行忘记,按比例替换成现在的新剧情
  • 输出控制基于目前的主线剧情和分线剧情,判断输出的结果

 

2.6 自编码(Autoencoder)

 

学习过程(非监督学习):压缩 -> (特征)学习 -> 解压,对比黑白X,求出预测误差,反向传递,提升自编码的准确性

 

编码器:Encoder

用途:给特征属性降维(类似于PCA)

 

解码器:Decoder

用途:作为生成器(类似于GAN)

实例:variational autoencoders,模仿并生成手写数字

 

2.7 生成对抗网络(GAN)

神经网络(数据 -> 结果):前向传播神经网络,CNN,RNN

生成网络(随机数 -> 结果):GAN(凭空捏造)

 

Generator:随机生成画作

Discriminator:通过带标签的画作,学习判别画作的好坏,进一步指导Generator生成画作

 

GAN网络

1. Generator根据随机数生成数据

2. Discriminator学习判断那些是真实数据,反向传递给Generator

3. Generator生成更真实的数据

 

 

2.8 神经网络的黑盒不黑

 

神经网络的分层:输入 -> 代表特征1 -> 代表特征2 -> 输出

 

高级玩法:迁移学习(Transfer Learning)

  保留一个神经网络的理解能力(转换代表特征的能力),套上另一个神经网络,用这种移植的方式进行再训练

 

2.9 神经网络:梯度下降(Gradient Descent)

优化问题分类:牛顿法(Newton's method)、最小二乘法(Least Squares method)、梯度下降法(神经网络,...)

误差方程(cost function):计算预测数值与实际数值之间的差别

 

全局最优(Globa minima) & 局部最优(Local minima)

 

2.10 迁移学习(Transfer Learning)

 适用场景:已经训练好的图片分类模型,去掉输出层,保留对图片的理解能力,用于新的图片评估任务

 

 

 

 不适用的场景:迁移前的数据和迁移后的数据差距很大

 

 

 

新玩法:多任务学习,或者强化学习中的 learning to learn

 

 

 

应用:不同语言之间的翻译

 

 

 

神经网络技巧

3.1 检验神经网络(Evaluation)

数据集分类:0.7训练数据,0.3测试数据

 

误差曲线(Error)

 

精确曲线(Accuracy)

  • R2 score:适用于分类和回归问题
  • F1 score:测量不均衡数据的精度

 

过拟合(overfitting)

  • 增加数据量
  • L1/L2 regularization
  • Dropout

 

 交叉验证:横坐标设置为需要测试的某一参数,纵坐标为误差值或精度值

 

3.2 特征标准化(Feature Normalization)

min-max normalization

  数据在(0,1)之间分布

std normalization

  mean=0(均值), std=1(方差)

 

3.3 选择好特征(Good Features)

  • 避免无意义的信息

单一特征有时不能够很好的进行区分,此时需要多个特征进行验证

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 gold, chihh = 400, 400
 5 
 6 gold_height = 40+10*np.random.randn(gold)
 7 chihh_height = 25+6*np.random.randn(chihh)
 8 
 9 plt.hist([gold_height, chihh_height], stacked=True, color=['r', 'b'])
10 plt.show()
View Code

 

  • 避免重复性的信息

 

  • 避免复杂的信息

测量步行时间时,特征信息选择AB间的距离,而不是AB间的经纬度

 

3.4 过拟合(Overfitting)

L1/L2 regularization

  避免参数W变化太大(曲线过于扭曲)

 

Dropout regularization

  每次训练都随机忽略一些神经元,使得预测结果不依赖其中某些特定神经元

 

3.5 优化器(Optimizer,加速神经网络训练)

SGD(Stochastic Gradient Descent)

  数据分批训练

 

Momentum

  优化网络参数

 

 AdaGrad

  优化学习率

 

RMSProp

 

Adam

 

3.6 处理不均衡数据(Imbalanced data)

 

获取更多数据

 

更换评判方式

 

重组数据:复制少数样本 / 砍掉多数样本 

 

其他机器学习方法:如决策树

 

修改算法:调整预测通过的门槛

 

3.7 批标准化(Batch Normalization)

数据标准化:将分散数据统一的方法

 

逐层进行标准化:解决激励函数处于饱和阶段(W>2,tahh~1)对x的扩大变得不再敏感

 

 BN添加位置:批数据进行前向传递forward propagation的时候,全连接+BN+激活函数

 

BN效果:更好的传达各层计算结果值的分布

 

BN算法:反向操作将标准化后的数据再扩展和平移,并让神经网络学着使用和修改扩展参数γ和平移参数β,来加强或低效标准化的操作

 

3.8 L1 / L2 正规化(Regularization)

解决过拟合问题

 

L1 / L2 Regularization:增加参数值的大小对误差的影响

 

核心思想:避免某一参数的决定性作用过强

 

图像化:切点位置能够使得表达式中两个误差和最小,此外,L1具有不稳定性

 

统一表达式:交叉验证的方法选择参数λ

 

自然语言处理

4.1 什么是自然语言处理 NLP

检索

 

翻译

 

对话

 

4.2 你天天用的搜索引擎是怎么工作的 - 文章向量化(TF-IDF)

构建索引:爬虫获取网络信息,放入数据池,构建索引,搜索获取

 

数值匹配搜索(多模态搜索):检索内容 -> 数值1 -> 数值匹配 -> 数值2 -> 返回结果

 

搜索过滤

 

批量召回:正排索引 / 倒排索引

 

粗排:TF-IDF(Term-Frequency Inverse Document Frequency)

词频(TF):以文章为单位统计单词出现的次数,但是语气词和“你我他”这类词会出现很多次,光靠TF没办法除去这些词的影响,此时IDF就能帮忙

逆文本频率指数(IDF):判断全部文章中出现某个词的频率的高低,用以判断某一词的区分能力

 

4.3 机器是这样理解语言 - 词向量(Word2Vec)

词汇的相似程度:距离,夹角(cosine)

 

中性词:高频,靠近原点,能够与很多词混搭(在家,在这,在吗)

 

词向量训练:前后文预测中间词,中间词预测前后文

 

 词向量用法:作为预训练特征,输入进另一个模型

 

词向量之间的关系

 

构造词向量:Word2Vec

 

4.4 机器是这样理解语言 - 句向量(Seq2Seq)

词向量表示

 

从词向量到句向量:(RNN) Encoding -> Decoding (RNN)

  

构造句向量:Seq2Seq框架

 

4.5 请注意用词 - 语言模型的注意力(Attention)

人类的注意力

 

 

图像识别的注意力

 

 

 

语言处理的注意力

 

 

 

4.6 请注意注意力 - 将注意力发挥到极致(Transformer)

视觉的多次注意

 

 

语言的多次注意

 

注意力模型(Transformer)

  多个人同时观察一句话,分别给出各自的注意力,再汇总他们的结论,这种方法相比单人观察,能够有效提升效率

 

 

 

4.7 肩膀上的眺望 - 预训练语言模型

人类知识的传递:写书(知识编码) -> 读书(知识解码)

 

 

 

机器知识的传递:模型迁移技术(稍作修改,顺应变化)

 

 

 

强化学习

5.1 什么是强化学习(Reinforcement Learning)

强化学习过程: 一开始什么都不懂 -> 不断尝试学习 -> 找到规律 -> 达到目标

 

 

 

举例:AlphaGo下象棋,AI玩Atari游戏

 

 

学习方式:打分,正确行为高分,错误行为低分,继续正确行为,避免错误行为(类似于监督学习中的,正确标签)

  • 强化学习:学习过程中获取标签,获取规律,提高得分
  • 监督学习:标签一开始就全部给出

 

 

强化学习算法

 

5.2 强化学习方法汇总

Model-Free RL:不理解环境,向真实环境中投放炸弹,结果把自己也炸死

Model-Based RL:理解自己所处的环境,在虚拟环境中进行试验(为现实世界建模),不影响自己所处的真实环境

 

二者使用方法相同,区别在于在在真实环境建模还是虚拟环境建模

 

二者最主要的差距就是,Model-Based RL能够通过想象模拟下一步行为,从择优选取最佳行为 

 

Policy-Based RL:有可能选择低概率行为

Value-Based RL:直接选取价值最高的行为

 

Policy-Based RL:动作连续

Value-Based RL:动作离散

 

 Actor-Critic:Actor基于概率做出动作,Critic基于做出的动作给出动作的下值

 

Monte-Carlo update:回合结束再更新

Temporal-Difference update:单步结束就更新

 

 目前单步更新方法更有效率

 

On-Policy:本人在场,边玩儿边学习

Off-Policy:自己玩儿或看着别人玩儿,学习自己或别人的过往经历

 

On-Policy:Sarsa -> Sarsa lambda

Off-Policy:Q Learning -> Deep-Q-Learning 

 

5.3 Q Learning

根据奖励值的大小选择下一步的行为

 

根据 Q 表的估计, 因为在 s1 中, a2 的值比较大, 通过之前的决策方法, 我们在 s1 采取了 a2, 并到达 s2, 这时我们开始更新用于决策的 Q 表, 接着我们并没有在实际中采取任何行为, 而是再想象自己在 s2 上采取了每种行为, 分别看看两种行为哪一个的 Q 值大, 比如说 Q(s2, a2) 的值比 Q(s2, a1) 的大, 所以我们把大的 Q(s2, a2) 乘上一个衰减值 gamma (比如是0.9) 并加上到达s2时所获取的奖励 R (这里还没有获取到我们的棒棒糖, 所以奖励为 0), 因为会获取实实在在的奖励 R , 我们将这个作为我现实中 Q(s1, a2) 的值, 但是我们之前是根据 Q 表估计 Q(s1, a2) 的值. 所以有了现实和估计值, 我们就能更新Q(s1, a2) , 根据 估计与现实的差距, 将这个差距乘以一个学习效率 alpha 累加上老的 Q(s1, a2) 的值 变成新的值. 但时刻记住, 我们虽然用 maxQ(s2) 估算了一下 s2 状态, 但还没有在 s2 做出任何的行为, s2 的行为决策要等到更新完了以后再重新另外做. 这就是 off-policy 的 Q learning 是如何决策和学习优化决策的过程.

 

ε-greedy=0.9,90%概率选择Q表的最优值选择行为,10%概率随机选择行为

0<α<1,表示随机效率,表示这一次的误差有多少需要被学习

0<γ<1,表示未来奖励的衰减值

 

距离当前状态越远的奖励衰减越严重

γ=1,未来的奖励没有任何的衰减

γ=0,表示未来没有奖励,即只在乎最近的最大奖励

0<γ<1,表示不仅仅看到眼前的利益,对远处的价值也有所评判

 

5.4 Sarsa

 

Q Learning只是估计下一步的奖励值,不一定实践

Sarsa则是说到做到,其余跟Q Learning一样

 

Q-Learning:说道不一定做到,Off-Policy

Sarsa:说道做到,On-Policy

 

 

Q-Learning:永远会选择捷径

Sarsa:最安全的道路

 

5.5 Sarsa (lambda)

Sarsa(0),单步更新,每走一步更新一次行为准则

Sarsa(1),走完一步,再走一步,再更新

Sarsa(n),这回合走了n步,再更新

Sarsa(λ),设置该回合要走的步数

 

单步更新:直到获取宝藏,才为获取宝藏的上一步更新

回合更新:回合结束之后,对本回合所经历的所有步都更新

 

这种情况下回合更新就会很没有效率

 

λ=0,表示Sarsa单步更新

λ=1,表示回合更新

0<λ<1,取值越大,距离宝藏越近的步,更新力度越大

 

5.6 DQN(Deep Q Network)

DQN:神经网络+Q-Learning

 

 

表格存储状态太复杂,且计算机装不下,搜索也是很耗时的事情

方法一:状态和动作 -> 神经网络 -> 生成Q值

方法二:状态 -> 神经网络 -> 各种可行的值

 

接下来我们基于第二种神经网络来分析, 我们知道, 神经网络是要被训练才能预测出准确的值. 那在强化学习中, 神经网络是如何被训练的呢? 首先, 我们需要 a1, a2 正确的Q值, 这个 Q 值我们就用之前在 Q learning 中的 Q 现实来代替. 同样我们还需要一个 Q 估计 来实现神经网络的更新. 所以神经网络的的参数就是老的 NN 参数 加学习率 alpha 乘以 Q 现实 和 Q 估计 的差距. 我们整理一下.

 

我们通过 NN 预测出Q(s2, a1) 和 Q(s2,a2) 的值, 这就是 Q 估计. 然后我们选取 Q 估计中最大值的动作来换取环境中的奖励 reward. 而 Q 现实中也包含从神经网络分析出来的两个 Q 估计值, 不过这个 Q 估计是针对于下一步在 s' 的估计. 最后再通过刚刚所说的算法更新神经网络中的参数. 

 

Experience replay,DQN每次更新的时候,随机抽取一些以往的经历进行学习

Fixd Q-targets,使用两个结构相同但参数不同的神经网络,预测 Q 估计 的神经网络具备最新的参数,而预测 Q 现实 的神经网络使用的参数则是很久以前的。

 

5.7 Policy Gradients

通过奖惩机制,决定下一次选择某一行为的可能性是增大还是减小

 

5.8 Actor Critic

 Actor-Critc,Policy Gradients + Value-Based ( Q-Learning)

 

 Actor需要奖惩机制来选择行为,而Critic学习这种奖惩机制,来指导Actor的行为

 

Actor-Critic 每次都是在连续的状态中更新参数,因此看待问题比较片面

 

DDPG的引入,解决了连续预测上学不到其他东西的问题

 

5.9 DDPG (Deep Deterministic Policy Gradients)

DDPG的拆解

 

Deep,更深层次的DQN

DDPG的网络形式要比DQN更加复杂

 

Deterministic,改变了输出动作的过程,只在连续变量中输出一个动作值

 

Policy Gradients,动作估计网络 + 动作现实网络

  • 估计网络输出实时动作,供actor在现实中实行
  • 现实网络用来更新Value-Based

Value-Based,状态现实网络 + 状态估计网络

  • 状态现实网络用动作现实网络的动作 + 状态的观测值进行分析
  • 状态估计网络用Actor施加的动作当做输入

 

5.10 A3C (Asynchronous Advantage Actor-Critic)

平行宇宙

 

 多核训练,提升效率

 

5.11 AlphaGo Zero 为什么更厉害?

AlphaGo

蒙特卡洛树搜索 + 深度搜索

 

神经网络:一个网络基于当前状态给出下一步的动作,一个神经网络用来评估当前状态是否有利

 

 AlphaGo Zero

无师自通

 

 两套神经网络融合为一个神经网络系统

 

使用TPU训练

 

进化算法

6.1 遗传算法(Genetic Algorithm)

遗传算法:重组+变异(翻转标签)

 

6.2 进化策略(Evolution Strategy)

进化策略:DNA通过实数表示,引入变异强度,能够遗传

 

6.3 神经网络进化(Neuro - Evolution)

遗传算法:通过父母神经网络的交叉配对,形成新的神经网络,再经过变异,获取新的能力,再放入现实,经过适者生存的法则

进化策略:由固定结构的神经网络,生成很多结构相同,联结强度稍稍不同的网络结构,下一代的神经网络是所有网络综合体,好宝宝的联结占有更多的比例

 

用原始的点创造出很多新的点,再通过新的点确定下一代的起点,能够有效避免局部最优

 

参考资料

莫烦Python 

 

posted @ 2020-12-06 09:47  林東雨  阅读(226)  评论(0编辑  收藏  举报