聊一聊深度学习(三天肝完深度学习基础,球球让我过吧!!)
最近有场考试!!所以来过一遍深度学习,记录一些笔记备考~
看老师的ppt与花书,双管齐下应对深度学习(保佑我不挂吧!!)废话结束!
引言
人工智能领域的流派
符号主义:逻辑主义,心理学派(推理期,心理期)
连接主义:仿生学派或生理学派 (殊途同归,各有所长)
机器学习流程(了解)
将输入信息处理,让计算机从数据(经验)中发现规律,构建一个映射函数,根据规律做出相应预测,完成某方面特定任务。 下面的都是非结构化数据; 例如西瓜书-->西瓜机器学习任务:
  随机选取西瓜样本,列出所有特征(颜色,根蒂、产地……)以及确定甜度(回归问题)   那就需要一个学习算法:(机器学习一般流程)   原始数据 --> ==特征处理==(数据预处理(缺失值填充或删掉,文本特征数据化,独热编码)--> 特征提取 --> 特征转换)-->预测 -->结果
由于特征工程往往占工程的80%,并且会被工程师的个人偏好影响,我们希望能自动地学习有效特征,所以我们出现了表示学习。
表示学习
花书的引言中就提到了这四个过程:
基于规则:输入 --- 手工制定程序 ---输出(人工实现)
一般化机器学习:输入 --- 手工制定程序 ---由特征通过模型映射---获得输出预测
表示学习:输入 --- 特征提取--- 由特征通过模型映射--- 获得输出预测
优化:输入 --- 简单的特征提取--- 更深一层特征提取抽象特征(多层) --- 由特征通过模型映射--- 获得输出预测(==Deep Learing==)
语义鸿沟
对于文本、图像中提取信息 或从字符串或图像底部提取特征(计算机很难理解) 图像是一个三或四通道的图像矩阵,仅仅是数字不能被理解。
好的数据表示
有很强的表示能力 (能够表达语义信息)
使后续的学习任务变简单 (接上后边进行映射的模型,我们希望获得更有用的特征使后续简单)
具有一般性或者说通用性,是任务或领域独立的 (不仅仅针对于西瓜二分类:甜与不甜,对于手写数字识别也能通用,便于迁移)
语义表示
局部表示
(离散表示、符号表示) one-hot向量 映射投入嵌入空间坐标系(如图是一个二维的嵌入空间 即从三维压缩到二维) 新的数值表达就是一个压缩的、低维的、稠密向量的表达也就是下面的分布式表达,而之前的one-hot向量就是一个局部表示。 ==特点:==: 优点:
这种离散的表示方式具有很好的解释性,有利于人工归纳和总结特征,并通过特征组合进行高效的特征工程;(与下面的相似度为0对应)
通过多种特征组合得到的往往是稀疏的二值向量,使线性模型计算效率很高。 缺点: 维数很高,不能扩展,往往新增一个数据就要增加维度。 对于不同特征,相似度为0,无法得到两两特征间的相似度。(对于智能推荐的相似度很明显)
分布式表示
嵌入:压缩、低维、稠密向量
从局部到分布式节省空间,例如 局部 : A B C D表示为 0001 0010 0100 1000 分布式 : A B C D表示为[0.3,0.5] [0.4,0.45][0.45,0.6][0.62,0.56] 同样更省空间可以保存新的值 例如加入E则要用5个数表示ABCDE,而分布式只是在加一个小数数组。E[0.8,0.34] ==嵌入的概念:嵌入通常指将一个度量空间中的一些对象映射到另一个低维的度量 空间中,并尽可能保持不同对象之间的拓扑关系。==
学习过程
监督学习:有反馈
根据误差更新学习系统。
无监督学习:无反馈
自己总结数据中的规律,没有类别标签 例如 聚类问题
强化学习:多步之后反馈
学习和强化过程,与环境交互有关系 例如:自动驾驶 没有标签
神经网络的性质和能力
1.非线性: ⼈⼯神经元可以是线性的,也可以是⾮线性的。 ** ⾮线性是⼀个⾮常重要的特性,特别是当产⽣输⼊信号的内部物理机制是天⽣⾮线性的时候** ==激活函数== 2.输⼊输出映射: 即可进⾏监督学习 同样的神经网络模型得到相同的结果 3.⾃适应性: ** 神经⽹络具有调整⾃身突触权值以适应外界环境变化的固有能⼒。** 4.证据响应: 在模式分类问题中,神经⽹络可以设计成不仅提供选择哪⼀个特定模型的息,还提供关于决策的置信度信息。后者可以⽤来拒判那些可能出现的过于模糊的模式,从⽽进⼀步改善⽹络的分类性能。 5.上下⽂信息: 神经⽹络的特定结构和激发状态代表知识。⽹络中每⼀个神经元都受⽹络中所有其他神经元全局活动的潜在影响。因此,神经⽹络很⾃然地能够处理上下⽂信息。 6.容错性: 神经⽹络在不利的运⾏条件下的性能是逐步下降的。⽐如⼀个神经元或其连接坏了,存储模式的记忆性在质量上会被削弱。但由于⽹络信息存储的分布特性,部分神经元的损坏不会造成灾难性的后果。 7. 超⼤规模集成实现: 神经⽹络的⼤规模并⾏性使它具有快速处理某些任务的潜在能⼒。 8.分析和设计的⼀致性: 神经⽹络作为信息处理器具有通⽤性。神经元,不管形式如何,在所有的神经⽹络中都代表⼀种相同成分。这种共性使得在不同应⽤中的神经⽹络共享相同的理论和学习算法成为可能。模块化⽹络可以⽤模块的⽆缝集成来实现。
前馈神经网络
深度前馈网络,也叫作前馈神经网络或者多层感知机,是典型的深度学习模型。 前馈网络是近似一个函数F,对于分类器:y = F(x) 将输入值映射到一个类别y, 前馈网络是定义一个映射y=f(x,α),并且学习参数α的值,使它与最佳函数近似。 这样被称为前向的,因为信息流过x函数,流经用于定义f的中间计算过程,最终到达输出y。在输入和模型本身没有反馈连接,若扩展为包含反馈连接,则称为循环神经网络。
线性&非线性
对于数据的分布确定线性可分与线性不可分。 简单地栗子,可以是我们的AND OR XOR计算 前两个操作,都可以找到一条分割线将数据分开,而XOR运算并不能通过线性进行分隔,下面会详细介绍分隔方法。 线性变换和线性映射: 线性映射:从一个向量空间V到另一个向量空间W的映射并且保持加法运算和数量乘法运算; 线性变换:线性空间V到其自身的线性映射 线性变换: 变换前是直线的变换后仍然是直线 直线比例保持不变 变换前是原点的,变换后依然是原点
之前的数字图像处理中的仿射变换是一个非线性变换(因为原点位置发生了变化) 我们有三个函数f(1); f(2)和f(3)连接在一个链上以形成f(x) =f(3)(f(2)(f(1)(x)))。这些链式结构是神经网络中最常用的结构。在这种情况下,f(1)被称为网络的第一层,f(2)被称为第二层,以此类推。链的全长称为模型的深度。 对于前馈网络最后一层是输出层,它产生接近y的值。而中间,训练数据没有给出每一层所需的输出,那这些层就是隐藏层。 每个隐藏层都是向量值的,而这些隐藏层维数就决定的是模型宽度。
以一个XOR进行前馈网络学习: 对于输入为 4行2列的x值 当进行上述网络计算后,过程如下 此时我们得到的所有样本仍在斜率为1的直线上,不能线性可分,所以我们引入了rule线性变换,
使[0,-1]过滤为[0,0],变为折线,不在一条直线上,可以用线性模型解决了。
再乘以权重向量w 即对每一个样本都给出了正确结果。 该神经网络拓扑图为 Rosenblatt感知器模型结构和代码可见,我的这个博客
激活函数的性质
1.连续并可导的(允许少数点上不可导)的非线性函数 不可导:比如relu取0的时候 2.激活函数及其导函数要尽可能简单 提高网络计算效率 3.激活函数的导函数值域要在合适的区间内
Sigmoid型函数
sigmoid是两端饱和函数:
Logistic
“挤压”函数,将把一个实数域的输入“挤压”到 (0, 1). 当输入值在0附近时,Sigmoid型函数近似为线性函数; 当输入值靠近两端时,对输入进行抑制.输入越小,越接近于 0;输入越大,越接近于 1. 导数:y’ = y(1 - y)
Tanh
非零中心化也是不好的性质:抑制和兴奋不明显,转换成零中心化使有兴奋有抑制。 两端饱和的激活函数好吗? 不好,应该找不饱和的,因为饱和是导数为0,梯度更新速度变慢,不利于更新
Hard-Logistic
解决以上两个开销较大的问题,采用分段函数来近似:
Relu
优点: 1.计算高效:仅进行加、乘和比较操作 2.一半进行抑制一半激活,具有生物学合理性(兴奋可以很高,又具有稀疏性) 3.相比于sigmoid函数,relu是左饱和函数,且在右半边导数为1,缓解梯度消失问题,加速收敛速度(缓解梯度消失和爆炸问题) 缺点 1.非零中心化,影响梯度下降效率 2.容易死亡:某一个神经元在一次不恰当更新后(w1很小会导致所有的求和后死亡下去),所有的训练数据都不能被激活,自身梯度也会永远是0(不仅会发生在第一层,有可能会发生在其他隐藏层) 为解决左饱和的问题提出带泄露的Relu
带泄露的Relu
其中γ是一个很小的常数,比如0.01.当γ < 1时,带泄露的 ReLU也可以写为LeakyReLU(x) = max(x, γx)
带参数的Relu
Swish
可以看这个博客 在深层模型上优于Relu 可作为自控们模型
万能近似定理
万能近似定理(universal approximation theorem):一个前馈神经网络如果具有线性输出层和至少一层具有任何一种 “挤压” 性质(非线性)的激活函数的隐藏层,只要给予网络足够数量的隐藏单元,它可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的 Borel 可测函数。在 Rn 的有界闭集上的任意连续函数是 Borel 可测的, 因此可以用神经网络来近似。 解决贡献度的过程: 先了解一下前馈网络符号定义: w更新: 我写的是以一个神经元为例的微观计算,宏观的应该是列成这样的式子: 反向传播含义:第L层的一个神经元的误差项是所有与该神经元相连的第L+1层的神经元的误差项权重和,然后再乘上该神经元激活函数的梯度。
梯度不稳定
初始化W时,通常使W绝对值在1附近,太大爆炸,太小就消失。 激活函数的导函数也会影响,例如logistic值域(0,0.25] 大部分趋于0
梯度不稳定的缓解方法
- 使用合适的参数初始化方法。例如使用服从标准正态分布的随机数初始化。
- 使用合适的学习率。
- 使用更好的激活函数。
- 梯度裁剪,对过大的梯度进行限制
- 使用批规范化(Batch Normalization, BN)技术。
输出层和代价函数
以恒等映射为例的均方误差代价函数:h-y
以logistic函数的均方误差代价函数:(h-y)* logistic函数导数 以logistic函数和对数似然代价函数: 计算过程不难,可以计算得到。 交叉熵应用于多分类问题
Softmax
通过e^x^ 的函数曲线,可以看出将大于0的值扩大(x到y的映射) 多分类概率问题:softmax+交叉熵代价函数 作用:输出二分类或多分类任务中某一类的概率。 意义:将输入排序,并转换为概率表示。
卷积神经网络
使用不同的卷积核(即“边”)可以得到不同的特征图。 不同的特征图代表了不同特征(“边”)在原图中的分布情况。 n个卷积核卷积之后可以得到n个特征图,也被称为n个通道的特征图。 为了表述方便,使用“通道”代替图片与特征图,例如: 1个通道通过3次卷积生成3个通道。
特征图与原图的关系
卷积核保留了原图的局部特征信息。 特征图保留了局部特征的强弱和位置信息。 卷积核与特征图可以看做原图的另一种表达形式。
特征图与原图的大小关系
原图大小大于等于卷积得到特征图的大小 原图 i * i 卷积核 k * 特征图大小 = (i - k + 1)/ s (s是步长)
卷积的本质是 利用特征(卷积核)进行局部特征提取,得到特征分布图的过程。
池化
特征图作为模型输入的优缺点 👍 提取到了局部特征作为输出。 👍 卷积使得图像特征具有了一定的平移不变性。 👎 特征图展开破坏了高维的位置(全局)信息。 👎 直接使用特征图输入全连接神经网络时参数规模较大。 平移不变性:抖动或微微变动,移动一个像素 对于两次卷积效果基本不变,影响不大(影响没有那么大)
特征图下采样: 最大池化:取一个区域最大值
卷积运算
卷积核要素: 1.卷积核shape 2.卷积核的值 3.卷积核滑动 对于卷积,通常外面套一个非线性激活函数 池化核要素: 1.池化核shape 2.滑动步长 3.池化方式 (最大池化 平均池化) 对于池化,外面无激活函数或线性激活函数
卷积计算量
计算量 = 卷积核大小 * 特征图大小 对特征图卷积的意义 特征提取:提取到了相对宏观的特征。 数据降维:多次卷积、池化使得数据的维度进一步降低。
卷积与池化的问题
1.卷积中不同元素参与卷积计算的次数不同 (与当初设计网络的初衷不符) 2.卷积与池化的步长不同时,边界处如何计算?(填充0值) 边界处理方法: valid边界,只利用有效数据,盛不下就不卷了 i - k + 1 / s = 个数 SAME边界,pad填充,使完全卷到 为了不卷到垃圾数!比如下图,左边填充两个值的时候,卷到的前两个数都是0,没有意义,都是垃圾数。 卷积网络的反向传播: 与全连接神经网络相比: 1.池化层的前一层残差计算 2.卷积层的前一层残差计算 3.卷积核中的参数的偏导数计算 有问题希望大家不吝赐教!! 后边没来得及整理完,求老师让过了吧!!