人工智能期末笔记

1. 绪论

  • 四大流派程序员

    • 符号主义(知识图谱)

      原理主要为物理符号系统(即符号操做系统)假设和有限合理性原理web

      用数理逻辑描述智能行为, 在计算机上实现了逻辑演绎系统。算法

      举例,其有表明性的成果为启发式程序LT逻辑理论家,证实了38条数学定理,表了能够应用计算机研究人的思惟多成,模拟人类智能活动。网络

    • 链接主义(神经网络)

      认为人工智能源于仿生学,特别是对人脑模型的研究。框架

      举例,MP神经元,感知机,神经网络机器学习

    • 行为主义(智能机器人)

      认为人工智能源于控制论。早期的研究工做重点是模拟人在控制过程当中的智能行为和做用,如对自寻优、自适应、自镇定、自组织和自学习等控制论系统的研究,并进行“控制论动物”的研制。ide

      举例,智能控制和智能机器人函数

    • 统计主义(机器学习)

      基于几率论与数理统计性能

      举例,贝叶斯分类器(条件几率)学习

<br>
  • AI,ML,DL的异同、关联

    知乎

    • AI最初的概念,是用计算机构造与人类拥有一样智慧的机器。

      人工智能的研究领域包括专家系统、CV、NLP、推荐系统等等。

      // AI分为弱AI和强AI,
      // 弱 AI 让机器经过观察和感知, 作到必定程度的理解和推理
      // 强 AI 让机器得到自适应能力, 解决没有遇到过的问题

      // 目前的科研工做都集中在弱人工智能这部分,并颇有但愿在近期取得重大突破
      // 电影里的人工智能多半都是在描绘强人工智能,而这部分在目前的现实世界里难以真正实现。

    • ML 是一种实现人工智能的方法

      ML 根据某些算法,经过大量数据进行训练和学习,而后对真实世界中的事件作出决策和预测。

      算法:决策树、聚类、贝叶斯分类、支持向量机等等。

      学习方法:监督学习(如分类问题)、无监督学习(如聚类问题)、半监督学习、集成学习、深度学习和强化学习。

      预处理:特征工程

    • DL 一种实现机器学习的技术

      DL 利用深度神经网络来进行特征表达,DL的学习过程就是DNN的训练过程

      DNN 自己并非一个全新的概念,可大体理解为包含多个隐含层的NN

      应用:图像识别、语音识别

      预处理:数据清洗

      存在的问题

      • 深度学习模型须要大量的训练数据,才能展示出神奇的效果,但现实生活中每每会遇到小样本问题,此时深度学习方法没法入手,传统的机器学习方法就能够处理
      • 有些领域,采用传统的简单的机器学习方法,能够很好地解决了,不必非得用复杂的深度学习方法
      • 深度学习的思想,来源于人脑的启发,但毫不是人脑的模拟,举个例子,给一个三四岁的小孩看一辆自行车以后,再见到哪怕外观彻底不一样的自行车,小孩也十有八九能作出那是一辆自行车的判断,也就是说,人类的学习过程每每不须要大规模的训练数据,而如今的深度学习方法显然不是对人脑的模拟
<br>
  • 机器学习的两个阶段

    • 训练(三步曲)

      • define Model

        定义 model

      • goodness of a function

        定义Loss function

      • pick the best function

        经过 GD 调整参数,使得损失函数达到最小值,此时的 function 就是某个 Model 中的最佳function

        # 全部训练数据用了一次
        for e in epoch:
            # 迭代多少次
            for it in iteration:
                GD(batchsize)
                update(W)
        
        # Epoch: 
        # All sample data in the train set are used once in 1 epoch
        # Iteration (Batch):
        #
        # Batch-size:
        # The number of data in one iteration

        偏差反向传播, 与GD一块儿使用, 更新权值, 训练模型

    • 测试

      在 Dev set / Test set 上进行测试

      前向传播, err = y - predict(x), acc = y - err, 给定输入, 预测输出, 计算准确率

<br>
  • 机器学习的分类(区分差别, 举例说明)

    • 监督学习

      数据集带标签, 即训练集的 y 已知, 能够计算 err = y - h(x)

      举例,线性回归,图像识别

    • 非监督学习

      数据集无标签,y 未知,须要经过某种方法自动组织成一个个类别

      举例,聚类算法

    • 半监督学习

      数据集一部分有标签,一部分没标签

    • 强化学习

      强化学习也是使用未标记的数据。

      在监督学习中,能直接获得每一个输入的对应的输出。强化学习中,训练一段时间后,你才能获得一个延迟的反馈,而且只有一点提示说明你是离答案愈来愈远仍是愈来愈近。

      游戏AI,AlphaGo,Dota,不是立刻就能获得游戏结果,可是能够在一段时间延迟后知道本身离胜利是否愈来愈近。

      DeepMind 利用强化学习令游戏 AI 大幅进步,以 AlphaGo 的成功最为典型。

    • 迁移学习

      https://blog.csdn.net/jiandan...

      从源领域(Source Domain)学习了东西,应用到新的目标领域(Target Domain)

      源领域和目标领域之间有区别,有不一样的数据分布

      样本迁移、特征迁移、模型迁移、关系迁移

      训练数据少(容易过拟合),原先某个训练好的模型,部分组件能够重用,部分组件须要修改,用于新的场景,

      相似面向对象,可重用性,或者某个web框架能够快速搭建各类web应用

      原来识别猫,如今能够识别狗(四条腿的特征能够重用),或者其余动物

      训练真实图片,识别卡通图片

<br>

线性回归

  • 机器学习定义

    机器学习,对于某类任务 T 和性能度量 P,模型程序能够经过经验 E 学习和改进,提高它在任务 T 上的性能 P

    T 预测

    P 准确率

    E 训练集

  • 线性回归

    Y = h(x) = WX + b

    X(1) = 28x1, Y(1) = 10x1

  • 三步曲

    model, loss function, 经过 GD 使 loss 最小

    训练集上表现很差 ---> 欠拟合 ---> 使用更复杂的模型,使用更多特征做为输入

    训练集表现好 -> 测试集表现很差 --> 过拟合 ---> 正则化,增长训练数据

  • 偏差来源分析

    Testing Error = Bias error + Variance Error

    Bias error ≈ train error = avoidable error + unavoidable error

    Variance error ≈ 测试集 上的表现比训练集上差多少

    = test error - train error
    • 欠拟合:bias error 高, variance error 低
    • 过拟合:bias error 低, variance error 高
    • Good:bias error 低, variance error 低
    • y5 = W5x^5 + ... + W1x + W0

      y1 = W1x + W0, y1 是 y5 的子集

  • 三类数据集

    • 训练集:训练模型参数
    • 开发/验证集:用于挑选超参数
    • 测试集:用于估计泛化偏差,衡量模型性能
  • 数据集不是特别大时,使用 K-折 交叉验证

    TODO 交叉验证

    将数据集D划分红k个大小类似的互斥子集,

    每次用k-1个子集做为训练集,余下的子集作测试集,最终返回k个训练结果的平均值。

    交叉验证法评估结果的稳定性和保真性很大程度上取决于k的取值。

  • 参数,自动学习,W,b

    超参数,某次训练中不会改变的,由程序员肯定

    lr,正则化系数,模型阶数,batchsize,epoch,梯度优化算法,filter的尺寸、步长

  • 正则化

    • L1(θ) = L(θ) + λ[θ]1

      [θ]1 = |w1| + |w2| + ... 参数绝对值之和,

      做用: 特征筛选

    • L2(θ) = L(θ) + λ[θ]2

      [θ]2 = w1^2 + w2^2 + ... 参数平方和

      做用:限制模型复杂度, 避免过拟合, 提升泛化能力

    • Elastic, L1 + L2

      L3(θ) = L(θ) + λ{ρ[θ]1 + (1-ρ)[θ]2}

  • 加快模型训练

    • 归一化
    • 使用不一样的 GD

      SGD, BGD, miniBGD, AdaGrad, RMSProp, SGDM, Adam,

      TODO: 不一样GD之间的比较

    • 微调学习率lr

      TODO: 自适应变化的lr,t++, η--

<br>

分类 classification

  • Why not use linear regression model to solve classification?

    • 线性回归没法解决多分类问题
    • 有些问题不是线性可分的(异或问题)
  • Why use cross entropy as loss metric, not MSE (Mean Square Error)?

    若是是交叉熵,距离target越远,微分值就越大,就能够作到距离target越远,更新参数越快。而平方偏差在距离target很远的时候,微分值很是小,会形成移动的速度很是慢,这就是不好的效果了。

    离目标离目标很近的时候,∂L/∂w 很小致使更新很慢。

  • What is Cascading logistic regression model? Why introduce this concept?

    https://blog.csdn.net/soulmee...

    https://cloud.tencent.com/dev...

    串级联的逻辑回归模型能够进行,特征转换,解决非线性的分类,如异或问题

    逻辑回归单元就是神经元的基本结构,能够组成神经网络


逻辑回归 vs 线性回归

深度学习

  • 对比三步曲

    • 定义一个函数集,即网络结构的选择
    • goodness of a function, 定义评价函数,即损失函数的选择

      https://blog.csdn.net/soulmee...

      以识别 MNIST 为例,对于一张图片,计算交叉熵做为 loss

      loss = - ln[yi], 其中 i 是正确的标签对应的下标,即 ^yi = 1, 其余 ^y = 0

      而后对于一个batch,计算 L = total loss = Σ loss

    • pick the best function, 挑选一个最好的函数,即如何更新权重进行学习

      选择使 L 最小的 function (网络参数),做为最佳 function

      枚举是不现实的,神经元个数太多,组合起来数量太大,须要使用梯度降低

      w = w - η ∂L/∂w,重复这个过程,直到 ∂L/∂w 很小,即 w 的更新量很小

      可是NN是非凸优化的,存在局部最小值

  • 反向传播,用于更新模型参数,

    Backpropagation: an efficient way to compute ∂L/∂w in neural network

    To compute the gradients efficiently, we use backpropagation.

    forward pass: 计算 ∂z/∂w

    backward pass 计算 ∂l/∂z = ∂l/∂a ∂a/∂z =

    会计算梯度(偏导)

  • 正向传播,用于预测输出,计算loss
  • 全链接

    输入层

    隐藏层

    输出层

  • 梯度消失,梯度爆炸

    缘由:网络太深,激活函数不合适,如sigmoid

    https://zhuanlan.zhihu.com/p/...

    只要是sigmoid函数的神经网络都会形成梯度更新的时候极其不稳定,产生梯度消失或者爆炸问题。

    靠近输出层的单元的梯度大,学习快,会一会儿收敛,认为网络已经收敛了。而靠近输入层的单元梯度小,学习慢,且有随机性。这样整个网络就好像是基于随机状况训练而来的。效果很差。

    若是考虑将权重初始化成大一点的值,又可能形成梯度爆炸。

    梯度爆炸和梯度消失问题都是由于网络太深,以及网络权值更新不稳定形成的,本质上是由于梯度反向传播中的连乘效应。

    解决方法,能够用新的激活函数 ReLU

    • 解决梯度消失的问题,由于它大于0的部分是线性的。小于0时即为0。
    • 计算量小
https://zhuanlan.zhihu.com/p/25631496

https://zhuanlan.zhihu.com/p/33006526
  • 欠拟合

    https://zhuanlan.zhihu.com/p/...

    • 调整网络结构,增长层数、神经元数,可是越深 ≠ 越好
    • 新的激活函数
    • MiniBatch and Batch Normalization, 提升训练速度和效果
    • 选择合适的损失函数 loss
  • 过拟合

    • Early Stopping

      随着在训练数据上的损失不断减少,在验证集上的偏差会在达到某个最小值后反而增大,这时能够考虑提前终止网络的训练,保留一个在训练集和验证集上效果都较好的网络。

    • 正则化
    • dropout, 以必定的几率丢弃部分单元,简化网络。
    • 更多数据进行训练
    • 创造训练数据,好比手写体识别,图片角度倾斜15度又变成了新的数据
<br>

两种特定场景的 NN

  • CNN, 卷积神经网络

    图像识别

    提取出图像的不一样特征,再搭配全链接网络和softmax进行分类

    • 图像能够用CNN的缘由

      • pattern具备局部性
      • 图像的不一样区域可能会出现的一样的pattern
      • 对图像进行向下采样,对总体特征的影响不大,
卷积层用到a和b两个缘由,池化层用到c缘由。

    同时,利用这些原理能够减小计算量。

    且,CNN是稀疏链接,且共享参数,大大减小了计算量,

    CNN能够很好地进行特征提取,再搭配全链接网络和softmax进行图像识别(分类)


    因为图像的特征具备局部性、重复性,所以能够经过卷积核进行特征提取

    另外,下降图像分辨率对图像总体特征的影响较小,所以经过池化进行向下取样,减小计算量

    综上,对比全链接,CNN是稀疏链接,且共享参数,大大减小了计算量,又有很好的识别效果

kernel/filter

*    stride

*    padding

*    超参数

    size, padding, stride, number-of-filters

    TODO:结合下面的输入输出尺寸,实例计算尺寸,计算特征

*    输入尺寸 输出尺寸
  • TODO:CNN结构,P41


  • RNN, 循环神经网络

    • TODO,结合上次做业
    • 什么是序列数据?举例说明。

      有时间维度的数据称为时间序列数据。如文本段落、语音输入、视频流、DNA序列分析等

    • RNN 特色

      当前的预测值考虑到了以前的运行结果

    • 即便只有一层的RNN模型仍可能出现梯度消失和梯度爆炸,为何?

      https://zhuanlan.zhihu.com/p/...

      对RNN进行优化须要用到BPTT,用来表示RNN的记忆状态,权值的偏导中存在累乘,若是每一项都小于1,那么乘多了就变0了,若是每一项都大于1,那么乘多了又会很大,因此RNN存在梯度消失和爆炸的缘由。

    • LSTM与通常的RNN相比,优点在哪。LSTM的结构

      • 能够避免梯度消失(没法消除梯度爆炸)

        在LSTM中,也有和RNN同样的记忆单元,叫作细胞状态(LSTM Cell)

        从上图能够看到,LSTM的单元状态更新公式中是一个加法而不是乘法

        表示之前的记忆须要忘记多少,表示这一次的输入须要添加多少

        由于是加法,因此不容易致使接近于0的状况。

      • LSTM能够保持长时记忆,LSTM的记忆门能够控制记忆存放多久。不过LSTM能够保持长时间记忆根本缘由也是由于LSTM解决了梯度消失的问题吧。
    • 训练LSTM至关因而训练每一个block的三个门的输入权值
    • 对于给定问题,能判断出是否该使用 RNN 模型

      当输入和输出有一个是序列数据时使用RNN模型。

      典型RNN任务:语音识别、音乐生成、语义分析、机器翻译。

相关文章
相关标签/搜索