简介

摘要

  • 讲解神经网络基本的训练和工作原理
  • 讲解反向传播和梯度下降
  • 梯度下降是神经网络的基本学习方法 讲解损失函数

人工智能的定义

  1. 第一个层面,人们对人工智能的期待可以分为:
    • 智能地把某件特定的事情做好,在某个领域增强人类的智慧,这种方式又叫做智能增强,例如搜索引擎,智能助手等,帮助人类完成某种特定任务,又称为”弱人工智能”,或者”狭义人工智能”.
    • 像人类一样能认知,思考,判断:模拟人类的智能,这样的智能也称为”通用人工智能“(Artificial General Intelligence, AGI),或”强人工智能”.
  2. 第二个层面,从技术的特点来看
    • 机器学习:如果一个程序解决任务(T)的效能(用P表示)随着经验(E)得到了提高,那么这个程序就能从经验(E)中学到了关于任务(T)的知识,并让衡量值(P)得到提高.
      1. 选择一个模型结构(例如逻辑回归,决策树等),这就是上面所说的程序
      2. 用训练数据(输入和输出) 输入模型,这就是上面的经验(E)
      3. 通过不断执行任务(T)并衡量结果(P),让P不断提高,直到达到一个满意的值.
    • 机器学习的各种方法是如何从经验中学习?其大致可分为三种类型:
      1. 监督学习(Supervised Learning) :通过标注的数据来学习
      2. 无监督学习(Unsupervised Learning):通过没有标注的数据来学习,这种算法可以发现数据中自然形成的共同特性(聚类),可以用来发现不同数据之间的联系
      3. 强化学习(Reinforcement Learning):让程序选择和它的环境互动,环境给程序反馈
    • 机器学习领域出现了各种模型,其中,神经网络模型是一个重要的方法
      • 它的原型在1943年就出现了,在生物神经网络中,每个神经元与其他神经元相连,当它兴奋时,就会向相邻的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值,那么它就会被激活(兴奋) ,向其他神经元发送化学物质.
      • 把许多这样的神经元按照一定的层次结构连接起来,我们就构建了一个神经网络
      • 随着数据的丰富和机器算力的增强,人们不断增加神经网络的层次数目,相邻层次之间的输入输出由非线性函数来控制,这就产生了DNN(深度神经网络).
      • 随着人们不断的调整网络结构,DNN也演变成许多不同的网络拓扑结构,例如 CNN(卷积神经网络), RNN(循环神经网络), LSTM(长期短期记忆), GAN(生成对抗网络), Transfer Learning(迁移学习)等,这些模型还在不断演化中
      • 训练AI模型,需要一系列专门的工具,业界有不少成熟的训练平台(TensorFlow, PyTorch, MXNet等),这些平台也在不断演化,支持新的模型,提高训练的效率,改进易用性等.
  3. 第三个层面,从应用的角度来看,狭义人工智能在各个领域都取得了很大的成果
    • 一种是标杆式的任务,例如ImageNet,考察AI模型能否识别图像的类别
    • 另一种是AI技术和各种其他技术结合,解决政府,企业,个人用户的需求.在政府方面,把所有计算,数据,云端和物联网终端的设备联系起来,搭建一个能支持智能决定的系统,现代社会的城市管理,金融,医疗,物流和交通管理等等都运行在这样的系统上.专家称之为智能基础建设

模型的生成与应用

  • 首先要设计一个模型,然后用已标注过的数据来训练这个模型,在训练过程中,模型的各个参数在多次训练中不断得到调整,最后得到了一个达到要求的模型.
  • 这个模型会被用于一个推理模型中,和其他程序模块一起组成一个应用程序或者是服务,能处理新的数据,满足用户的需求.

范式的演化

范式演化的四个阶段:

  1. 第一阶段:经验
    • 人类最早的科学研究,主要以记录和描述自然现象为特征,可以称之为”经验归纳”(第一范式)
  2. 第二阶段:理论
    • 科学家们开始明确定义,速度是什么,质量是什么等等
  3. 第三阶段:计算仿真
    • 从二十世纪中期开始,利用电子计算机对科学实验进行模拟仿真的模式得到迅速普及
  4. 第四阶段:数据探索
    • 在这个阶段,科学家收集数据,分析数据,探索新的规律.
    • 在深度学习的浪潮中出现的许多结果就是基于海量数据学习得来的.有些数据并不是从现实世界中收集而来的,而是由计算机程序自己生成的

数据探索

  • 当人类探索客观世界的时候,大部分情况下,我们是不了解新环境的运行规则.这个时候,我们可以观察自己的行动和客观世界的反馈,判断得失,再总结出规律.这种学习方法,叫强化学习(Reinforcement Learning),可以使用这种方法来找出适合的策略

神经网络的基本工作原理简介

神经元计算模型:

  1. 输入 input:
    • (x1, x2, x3)是外界输入信号,一般是一个训练数据样本的多个属性. 例如:(x1, x2, x3)分别代表了(红, 绿, 蓝)三种颜色,而此神经元用于识别输入的信号是暖色还是冷色
  2. 权重 weights:
    • (w1, w2, w3)是每个输入信号的权重值,以上面的(x1, x2, x3)的例子来说,x1的权重可能是0.92, x2的权重可能是0.2, x3的权重可能是0.03. 权重值相加之后可以不是1
  3. 偏移 bias:
    • 一般的书或者博客上会说:那是因为y = w*x + b, b是偏移值,使得直线能够沿Y轴上下移动,这是用结果来解释原因,并非b存在的真实原因
    • 从生物学上解释,在脑神经细胞中,一定是输入信号的电平/电流大于某个临界值时,神经元细胞才会处于兴奋状态,这个b实际就是那个临界值. 即当: w1 * x1 + w2 * x2 + w3 * x3 >= t时,该神经 细胞才会兴奋
  4. 激活函数 activation:
    • 求和之后,神经细胞已经处于兴奋状态了,已经决定要向下一个神经元传递信号了,但是要传递多强烈的信号,要由激活函数来确定.
    • 如果激活函数是一个阶跃信号的话,会像继电器开合一样咔咔的开启和闭合; 但是在生物体中是不可能有这种装置的,而是一个渐渐变化的过程.所以激活函数都是有一个渐变的过程,也就是是个曲线

神经网络的主要功能

  1. 回归(Regression)或者叫做拟合(Fitting)
    • 单层的神经网络能够模拟一条二维平面上的直线,从而可以完成线性分割任务
    • 所谓回归或者拟合,其实就是给出x值输出y值的过程,并且让y值与样本数据形成的曲线的距离可能的小,可以理解为是对样本数据的一种骨架式的抽象.
  2. 分类(Classification)
    • 使用一个两层的神经网络可以得到一个非常近似的结果,使得分类误差在满意的范围之内.
    • 分类可以理解为对两类或多类样本数据的边界的抽象
    • 对于复杂的函数,一个两层的神经网络是如何做到的?其实从输入层到隐藏层的矩阵计算,就是对输入数据进行了空间变换,使其可以被线性可分,然后在输出层画出一个分界线.而训练的过程,就是确定那个空间变换矩阵的过程.因此,多层神经网络的本质就是对复杂函数的拟合.

激活函数的作用

  1. 激活函数相当于人类的关节
  2. 如果不运用激活函数,输出信号将仅仅是一个简单的线性函数,线性函数是一个一级多项式.线性方程是很容易解决的,但是它们的复杂性有限,并且从数据中学习复杂函数映射的能力更小.一个没有激活函数的神经网络将只不过是一个线性回归模型罢了,不能解决现实世界中的大多数非线性问题.
  3. 没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如图像,视频,音频,语音等.这就是为什么要使用人工神经网络技术,诸如深度学习等来理解一些复杂的事情,一些相互之间具有很多隐藏层的非线性问题

神经网络中的三个基本概念:反向传播, 梯度下降, 损失函数

  • 神经网络训练的最基本的思想就是:先”猜”一个结果,称为预测结果a,看看这个预测结果和事先标记好的训练集中的真是结果y之间的差距,然后调整策略,再试一次,这一次就不是”猜”了,而是有依据地向正确的方向靠近.如此反复多次,一直到预测结果和真实结果之间相差无几,即 a - y 趋近于 0 ,就结束训练.在神经网络训练中,我们把”猜”叫做初始化,可以随机,也可以根据以前的经验给定初始值
  • 简单总结反向传播和梯度下降的基本工作原理:
    1. 初始化;
    2. 正向计算;
    3. 损失函数提供计算损失的方法;
    4. 梯度下降是在损失函数基础上向着损失最小的点靠近而指引了网络权重调整的方向;
    5. 反向传播把损失值反向传给神经网络的每一层,让每一层都根据损失值反向调整权重;
    6. Go to 2,直到精度足够好

梯度下降

  • 梯度下降三要素:
    1. 当前点;
    2. 方向;
    3. 步长.
  • 为什么说是”梯度下降”?
    1. 梯度:函数当前位置的最快上升点
    2. 下降:与导数相反的方向,用数学语言描述就是那个减号; 亦即与上升相反的方向运动,就是下降.

损失函数

  • 概念:
    • 在各种材料中经常看到的中英文词汇有:误差,偏差,Error,Cost,Loss,损失,代价等,意思都差不多
    • 使用”损失函数”和”Loss Function”这两个词汇,具体的损失函数符号用J来表示,误差值用loss表示
    • “损失”就是所有样本的”误差”的总和
    • 在黑盒子的例子中,如果说”某个样本的损失”是不对的,只能说”某个样本的误差”,因为样本是一个一个计算的.
    • 如果我们把神经网络的参数调整到完全满足独立样本的输出误差为0,通常会令其它样本的误差变得更大,这样作为误差之和的损失函数值,就会变得更大.所以,我们通常会根据某个样本的误差调整权重后,计算一下整体样本的损失函数值,来判定网络是不是已经训练到了可接受的状态.
  • 损失函数的作用:
    • 损失函数的作用,就是计算神经网络每次迭代的前向计算结果与真实值的差距,从而指导下一步的训练正确的方向进行.
    • 如何使用损失函数?具体步骤:
      1. 用随机值初始化前向计算公式的参数;
      2. 代入样本,计算输出的预测值;
      3. 用损失函数计算预测值和标签值(真实值)的误差;
      4. 根据损失函数的导数,沿梯度最小方向将误差回传,修正前向计算公式中的各个权重值;
      5. 进入第二步重复,指导损失函数值达到一个满意的值就停止迭代
  • 神经网络中常用的损失函数:
    • 均方差函数,主要用于回归
    • 交叉熵函数,主要用于分类
    • 二者都是非负函数,极值在底部,用梯度下降法可以求解.

第二步:线性回归

神经网络法

  • 定义神经网络结构:
    1. 输入层
    2. 权重w,b
    3. 输出层
    4. 损失函数
  • 训练过程:
    1. 读取一个样本数据
    2. 前向计算
    3. 反向传播
    4. 更新梯度
  • 推理预测:
    • 推理过程,实际上就是一个前向计算过程,把它单独拿出来,方便对外接口的设计,所以这个方法被设计成了公开的方法

样本特征数据标准化

  • 数据标准化(Normalization),又可以叫做数据归一化

  • 为什么要做标准化?
  • 理论层面上,神经网络是以样本在事件中的统计分布概率为基础进行训练和预测的,所以它对样本数据的要求比较苛刻
    1. 样本的各个特征的取值要符合概率分布,即[0,1]
    2. 样本的度量单位要相同
    3. 神经网络假设所有的输入输出数据都是标准差为1,均值为0,包括权重值的初始化,激活函数的选择,以及优化算法的设计
    4. 数值问题
    5. 梯度更新,如果输出层的数量级很大,会引起损失函数的数量级很大,这样做反向传播时的梯度也就很大,这时会给梯度的更新带来数值问题
    6. 学习率
  • 标准化的常用方法:
    • Min-Max标准化(离差标准化),将数据映射到[0,1]区间
    • 平均值标准化,将数据映射到[-1,1]区间
    • 对数转换
    • 反正切转换
    • Z-Score法(标准差标准化/零均值标准化):把每个特征值中的所有数据,变成平均值为0,标准差为1的数据,最后正态分布
    • 中心化,平均值为0,无标准差要求
    • 比例法,要求数据全是正值

总结:

  1. 标准如果不做标准化,网络发散,训练无法进行;
  2. 训练样本标准化后,网络训练可以得到结果,但是预测结果有问题;
  3. 还原参数值后,预测结果正确,但是此还原方法并不普遍使用;
  4. 标准化测试样本,而不需要还原参数值,可以保证普遍使用;
  5. 标准化标签纸,可以使得网络训练收敛快,但是在预测时需要把结果反标准化,以便得到真实值.

第三步:线性分类

摘要

  • 分类问题在很多资料中都称之为逻辑回归, Logistic Regression, 其原因是使用了线性回归中的线性模型,加上一个Logistic二分类函数,共同构造了一个分类器.
  • 神经网络的一个重要功能就是分类,现实世界中的分类任务复杂多样,但是万变不离其宗,我们都可以用同一种模式的神经网络来处理

逻辑回归模型

  • 回归问题可以分为两类:线性回归和逻辑回归
    1. 逻辑回归(Logistic Regression), 回归给出的结果是事件成功或失败的概率.当因变量的类型属于二值(1/0, 真/假, 是/否)变量时,我们就应该使用逻辑回归
    2. 线性回归使用一条直线拟合样本数据,而逻辑回归的目标是”拟合”0或1两个数值,而不是具体连续数值,所以成为广义线性模型.
    3. 逻辑回归又称Logistic回归分析,常用于数据挖掘,疾病自动诊断,经济预测等领域
    4. 逻辑回归的另外一个名字叫做分类器,分为线性分类器和非线性分类器,然后无论是线性还是非线性分类器,又分为两种:二分类问题和多分类问题.
  • 回归问题->逻辑回归问题->线性逻辑回归即分类问题->线性二分类问题

二分类函数

  • 对率函数Logistic Function,即可以作为激活函数使用,又可以作为二分类函数使用.在二分类任务中,叫做Logistic函数;在作为激活函数时,叫做Sigmoid函数

实现逻辑与或非门

  • 单层神经网络,又叫做感知机,它可以轻松实现逻辑与,或,非门.由于逻辑与,或门,需要有两个变量输入,而逻辑非门只有一个变量输入.但是它们共同的特点是输入为0或1,可以看做是正负两个类别

第四步:非线性回归

第五步:非线性分类

第六步:模型部署

摘要

  • 如果已经用神经网络训练出来了一套权重矩阵,那么在实际生产环境中如何使用这些权重矩阵?
  • 如果需要将训练好的网络用到后台服务中:搭建网络->加载权重矩阵->调用前向计算
  • 如果是在桌面端或手机端应用中使用这些权重矩阵,这就是一个跨平台,跨语言的需求.引出了模型文件的概念,后面也直接简称为模型.
  • 模型文件中不仅包含了所有的权重矩阵,还记录了该神经网络的数据流图.这样不同平台,不同语言都可以根据模型文件里的信息构建网络,加载权重矩阵,执行前向计算.

模型的推理与部署

  • 在经过几天或者几个月的训练之后,得到了一系列的能够满足需求的权重矩阵.将输入数据按一定的顺序与权重矩阵进行运算,就可以得到对应的输出,这个过程就是推理的过程.
  • 如果没有保存这些权重矩阵,那么每次使用之前,需要重新训练,这在计算资源有限的情况下是难以接受的.另外一个选择是将训练好的权重矩阵保存下来,需要使用的时候重新加载权重矩阵.
  • 几乎所有的训练平台都会把网络结构,权重矩阵等信息保存在文件中,这就是我们常说的模型文件,后面也直接简称为模型.
  • 模型文件快问快答:
    1. 为什么需要模型文件?
      • 模型,可以想象为一个”黑盒”,输入是需要处理的一张图像,输出是一个它的类别信息或是一些特征,模型文件也因此保存了能完成这一过程的所有重要信息,并且还能用来再次训练,推理等,方便了模型的传播与发展.
    2. 模型文件描述的是什么?
      • 首先,目前绝大部分的深度学习框架都将整个AI模型的计算过程抽象成数据流图(Data Flow Graphs),用户写的模型构建代码都由框架组建出一个数据流图(也可以简单理解为神经网络的结构),而当程序开始运行时,框架的执行器会根据调度策略一次执行数据流图,完成整个计算.
      • 有了上面的背景知识,很容易想到:为了方便地重用AI模型的计算过程,需要将它运行的数据流图,相应的运行参数(Parameters)和训练出来的权重(Weights)保存下来,这就是AI模型文件主要描述的内容.
    3. AI模型的作用是什么?
      • 以视觉处理为例,人通过眼睛捕获光线,传递给大脑处理,返回图像的一些信息,例如:这是花,那是动物.AI模型的作用就相当于大脑的处理,能根据输入的数据给予一定的判断.
      • 使用封装好的AI模型,那么设计者只需要考虑把输入的数据处理成合适的格式(类似于感光细胞的作用),然后传递给AI模型(大脑),之后就可以得到一个想要的数据.
    4. 模型文件有哪些类型?TensorFlow和其他框架有什么区别?
      • 由于每个深度学习框架都有自己的设计理念和工具链,对数据流图的定义和粒度都不一样,所以每家的AI模型文件都有些区别,几乎不能通用.
      • TensorFlow在设计之处,就考虑了从训练,预测,部署等复杂的需求,所以它的数据流图几乎涵盖了整个过程可能涉及到的操作,例如:初始化,后向求导以及优化算法,设备部署(Device Placement)和分布式化,量化压缩等,所以只需要通过TensorFlow的模型文件就能获取模型完整的运行逻辑,所以很容易迁移到各种平台使用.
    5. 拿到一个模型文件,自己有一些新的数据,就能继续训练AI吗?如果不能,还需要做什么 ?
      • 训练模型的时候,除了网络架构和权重,还有训练时所使用的各种超参,比如:使用的优化器(Optimizer),批量大小(Batch size),学习率(Learning rate),冲量(Momentum)等,这些都会影响我们再训练的效果,需要格外注意.
    6. ONNX文件是什么,如果保存为ONNX文件?
      • 开放式神经网络交换(Open Neural Network Exchange,简称ONNX),是由微软,FaceBook,亚马逊等多个公司一起推出的,针对机器学习设计的开放式文件格式,可以用来存储训练好的模型.它使得不同的人工智能框架可以采用相同的格式存储模型数据并交互.
      • 目前很多机器学习框架都支持ONNX格式,如Pytorch,Caffe2,CNTK,ML,NET,MXNet等,它们都有专门的export_to_onnx方法,通过遍历它们原生的数据流图,转换为ONNX标准的数据流图.而对于TensorFlow这样并不原生支持ONNX的框架,通常会使用图匹配(Graph Matching)的方法转化数据流图
    7. 转化的来的模型文件有什么信息丢失?
      • 由于模型文件仅仅描述了数据流和和权重,并不包含操作符的具体实现,所以不同框架对于”同名”的操作符理解和实现也会有所不同,最终可能得到不完全一致的推理结果
    8. 模型文件是如何与应用程序一起工作的?
      • 应用程序使用模型文件,本质也是要执行模型文件的数据流图.一般有两种方式实现模型文件和应用程序的协作:
        1. 如果有可以独立执行模型文件的运行时(Runtime),例如:系统级别的CoreML,WinML和软件级别的Caffe,DarkNet等,我们就可以在程序中动态链接直接使用
        2. 除此之外,也可以将数据流图和执行数据流图的程序(一般称为Op Kernel)编译在一起,从而脱离运行时,由于单一模型涉及到的操作有限,这样可以极大减少框架所占用的资源.
      • 在将模型集成到应用程序中之前,应该先使用模型查看工具(例如Netron等)查看模型的接口,输入输出的格式和对应的范围,然后对程序中传入模型的输入作对应的预处理工作,否则可能无法得到预期的效果.
    9. 本地机器有GPU,在运行推理模型的时候,怎么能利用上GPU资源?
      • 首先需要安装匹配的显卡驱动,CUDA和GPU版的框架,然后根据框架进行代码调整:
      • 对于TensorFlow这样能够自动做设备部署(Device Placement)的框架,它会尽量把GPU支持的操作自动分配给GPU计算,不太需要额外的适配;
      • 对于PyTorch,MXNet这样不具有自动设备部署功能的框架,可能需要进行一个额外的操作将模型,张量(tensor)从CPU部署到GPU上.

ONNX模型文件

  • ONNX是一个开放式的规范,定义了可扩展的计算图模型,标准数据类型以及内置的运算符.该文件在存储结构上可以理解为是一种层级的结构
    • 最顶层结构是模型(Model):模型记录了该模型文件的基本数据,例如:使用的ONNX标准的版本,使用的运算符集版本,制造商的名字和版本等信息.除此以外,模型中记录着最主要的信息是图(Graph)
    • 图(Graph):可以理解为是计算图的一种描述,是由输入,输出以及节点(Node)组成的,它们之间通过寻找相同的名字实现连接,也就是说,相同名字的变量会被认为是同一个变量,如果一个节点的输出名字和另一个节点的输入名字相同,这两个节点会被认为是连在一起的
    • 节点(Node):就是要调用的运算符,多个节点(Node)以列表的形式在图(Graph)中存储

第七步:深度神经网络

第八步:卷及神经网络

卷积神经网络概述

  • 卷积神经网络(CNN,Convolutional Neural Net)是神经网络的类型之一,在图像识别和分类领域中取得了非常好的效果,比如识别人脸、物体、交通标识等,这就为机器人、自动驾驶等应用提供了坚实的技术基础。

  • 一个典型的卷积神经网络中,会至少包含以下几个层:
    • 卷积层
    • 激活函数层
    • 池化层
    • 全连接分类层
  • 卷积核, 就是一个小矩阵,
  • 在卷积层中,我们会用输入数据与卷积核相乘,得到输出数据,就类似全连接层中的Weights一样,所以卷积核里的数值,也是通过反向传播的方法学习到的
  • 各种卷积核的作用
    • 锐化(sharpness) : 如果一个像素点比周围像素点亮,则此算子会令其更亮
    • 检测竖边(vertical edge) : 检测出了十字线中的竖线,由于是左侧和右侧分别检查一次,所以得到两条颜色不一样的竖线
    • 周边(surround) : 把周边增强,把同色的区域变弱,形成大色块
    • Sobel-Y(sobel y) : 纵向亮度差分可以检测出横边,与横边检测不同的是,它可以使得两条横线具有相同的颜色,具有分割线的效果
    • Identity : 中心为1四周为0的过滤器,卷积后与原图相同
    • 横边检测(horizontal edge) : 检测出了十字线中的横线,由于是上侧和下侧分别检查一次,所以得到两条颜色不一样的横线
    • 模糊(blur) : 通过把周围的点做平均值计算而“杀富济贫”造成模糊效果
    • Sobel-X(sobel x) : 横向亮度差分可以检测出竖边,与竖边检测不同的是,它可以使得两条竖线具有相同的颜色,具有分割线的效果
    • 浮雕(embossing) : 形成大理石浮雕般的效果
  • 卷积神经网络通过反向传播而令卷积核自我学习,找到分布在图片中的不同的feature,最后形成的卷积核中的数据。
  • 但是如果想达到这种效果,只有卷积层的话是不够的,还需要激活函数、池化等操作的配合

  • 我们实现的卷积操作不是原始数学含义的卷积,而是工程上的卷积,可以简称为卷积
  • 在实现卷积操作时,并不会反转卷积核
  • 在传统的图像处理中,卷积操作多用来进行滤波,锐化或者边缘检测啥的。我们可以认为卷积是利用某些设计好的参数组合(卷积核)去提取图像空域上相邻的信息

  • 多入单出的降维卷积
    • 一张图片,通常是彩色的,具有红绿蓝三个通道。我们可以有两个选择来处理
      • 变成灰度的,每个像素只剩下一个值,就可以用二维卷积
      • 对于三个通道,每个通道都使用一个卷积核,分别处理红绿蓝三种颜色的信息
    • 显然第2种方法可以从图中学习到更多的特征,于是出现了三维卷积,即有三个卷积核分别对应输入的三个通道,三个子核的尺寸是一样的,比如都是2x2,这样的话,这三个卷积核就是一个3x2x2的立体核,称为过滤器Filter,所以称为三维卷积
  • 每一个卷积核对应着左侧相同颜色的输入通道,三个过滤器的值并不一定相同。对三个通道各自做卷积后,得到右侧的三张特征图,然后再按照原始值不加权地相加在一起,得到最右侧的白色特征图,这张图里面已经把三种颜色的特征混在一起了,所以画成了白色,表示没有颜色特征了
  • 虽然输入图片是多个通道的,或者说是三维的,但是在相同数量的过滤器的计算后,相加在一起的结果是一个通道,即2维数据,所以称为降维。这当然简化了对多通道数据的计算难度,但同时也会损失多通道数据自带的颜色信息

  • 卷积编程模型, 五个概念
    • 输入 – Input Channel
    • 卷积核组 – WeightsBias
    • 过滤器 – Filter
    • 卷积核 – Kernel
    • 输出 – Feature Map
  • 输入是三维数据(3x32x32),经过2x3x5x5的卷积后,输出为三维(2x28x28),维数并没有变化,只是每一维内部的尺寸有了变化,一般都是要向更小的尺寸变化,以便于简化计算
  • 三维卷积的特点:
    • 预先定义输出的feature map的数量,而不是根据前向计算自动计算出来
    • 对于每个输出,都有一个对应的过滤器Filter
    • 每个Filter内都有一个或多个卷积核Kernal,对应每个输入通道(Input Channel),
    • 每个Filter只有一个Bias值,Filter-1对应b1,Filter-2对应b2
    • 卷积核Kernal的大小一般是奇数如:1x1, 3x3, 5x5, 7x7等
  • 步长:
    • 每次计算后,卷积核会向右或者向下移动一个单元,即步长stride = 1
    • 卷积核每次向右或向下移动两个单元,即stride = 2
  • 一般情况下,我们用正方形的卷积核,且为奇数
  • 如果计算出的输出图片尺寸为小数,则取整,不做四舍五入

卷积神经网络应用

  • 卷积神经网络是现在深度学习领域中最有用的网络类型,尤其在计算机视觉领域更是一枝独秀。卷积神经网络从90年代的LeNet开始,沉寂了10年,也孵化了10年,直到2012年AlexNet开始再次崛起,后续的ZF Net、VGG、GoogLeNet、ResNet、DenseNet,网络越来越深,架构越来越复杂,解决反向传播时梯度消失的方法也越来越巧妙。下面让我们一起学习一下这些经典的网络模型

  • LeNet是卷积神经网络的开创者LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,卷积神经网络的最基本的架构就定下来了:卷积层、池化层、全连接层

第九步:循环神经网络