教程总体简介:在职高新课-深度学习 要求 目标 环境要求 1.1 深度学习介绍 学习目标 1.1.1 区别 1.1.3 深度学习代表算法-神经网络 1.1.4 为什么深度学习现在效果非常好 深度学习与神经网络 1.2 神经网络基础 循环神经网络 4.2 词嵌入与NLP 4.3 seq2seq与Attention机制 5.1 生成对抗网络(GAN) 高级主题 5.2 自动编码器 5.3 CapsuleNet(了解) 1.3 浅层神经网络 深度学习进阶 2.1 多分类与TensorFlow 2.2 梯度下降算法改进 2.4 BN与神经网络调优 3.1 图像数据与边缘检测 3.2 卷积神经网络(CNN)原理 3.3 经典分类网络结构 3.5 CNN网络实战技巧
完整笔记资料代码:https://gitee.com/yinuo112/AI/tree/master/深度学习/嘿马深度学...
感兴趣的小伙伴可以自取哦~
全套教程部分目录:
部分文件图片:
在职高新课-深度学习
要求
- 需要一定的数学基础,高数、线性代数、概率论
- 需要掌握机器学习基础,分类、回归等算法
- 需要会使用相关工具,Scikit-learn、Numpy、TensorFlow
目标
算法
- 掌握神经网络的数学原理
- 使用工具动手实现神经网络结构
应用
- 使用TensorFlow编写神经网络案例
安排
环境要求
tensorflow==1.8.0
h5py==2.8.0
numpy==1.14.2
scikit-learn==0.18.1
matplotlib==2.2.2
1.1 深度学习介绍
学习目标
目标
- 知道深度学习与机器学习的区别
- 了解神经网络的结构组成
- 知道深度学习效果特点
应用
- 无
1.1.1 区别
1.1.1.1 特征提取方面
- 机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识
深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,通过将数据从一层传递到另一层来构建更复杂的模型。通过大量数据的训练自动得到模型,不需要人工设计特征提取环节。
深度学习算法试图从数据中学习高级功能,这是深度学习的一个非常独特的部分。因此,减少了为每个问题开发新特征提取器的任务。适合用在难提取特征的图像、语音、自然语言领域
1.1.2 深度学习应用场景
图像识别
- 物体识别
- 场景识别
- 车型识别
- 人脸检测跟踪
- 人脸关键点定位
- 人脸身份认证
自然语言处理技术
- 机器翻译
- 文本识别
- 聊天对话
语音技术
- 语音识别
1.1.3 深度学习代表算法-神经网络
1.1.3.1 神经网络
人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN)。是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)结构和功能的 计算模型。经典的神经网络结构包含三个层次的神经网络。分别输入层,输出层以及隐藏层。
其中每层的圆圈代表一个神经元,隐藏层和输出层的神经元有输入的数据计算后输出,输入层的神经元只是输入。
神经网络的特点
- 每个连接都有个权值,同一层神经元之间没有连接
- 神经元当中会含有激活函数
- 最后的输出结果对应的层也称之为全连接层
神经网络是深度学习的重要算法,用途在图像(如图像的分类、检测)和自然语言处理(如文本分类、聊天等)
那么为什么设计这样的结构呢?首先从一个最基础的结构说起,神经元。以前也称之为感知机。神经元就是要模拟人的神经元结构。
一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。这个连接的位置在生物学上叫做“突触”。
1.1.3.2 神经网络理解案例
我们以票房预测的例子说明
输入影响票房的N个因素,这里举例四个因素,结果输出一个Y预测票房结果
1.1.4 为什么深度学习现在效果非常好
过去十多年,得益于数字社会的发展,积累了大量的数据。以前的一些算法到达了瓶颈期,它们无法适用于大量的数据。"大规模"一直推动深度学习的发展进步。不仅仅是数据量的大,算法模型规模越来越大等。
- 数据
计算
- 训练网络需要GPU、TPU
算法
- 一些创新,如ReLU激活函数
深度学习与神经网络
知道深度学习与机器学习的区别
了解神经网络的结构组成
知道深度学习效果特点
知道逻辑回归的算法计算输出、损失函数
知道导数的计算图
知道逻辑回归的梯度下降算法
知道多样本的向量计算
应用完成向量化运算
应用完成一个单神经元神经网络的结构
知道浅层神经网络的前向计算过程
知道选择激活函数的原因
说明浅层网络的反向传播推导过程
应用完成一个浅层神经网络结构进行分类
了解深层网络的前向传播与反向传播的过程
1.2 神经网络基础
学习目标
目标
- 知道逻辑回归的算法计算输出、损失函数
- 知道导数的计算图
- 知道逻辑回归的梯度下降算法
- 知道多样本的向量计算
应用
- 应用完成向量化运算
- 应用完成一个单神经元神经网络的结构
1.2.1 Logistic回归
1.2.1.1 Logistic回归
逻辑回归是一个主要用于二分分类类的算法。那么逻辑回归是给定一个<span>x x x</span><span>y^=P(y=1∣x) \hat{y}=P(y=1|x) y^=P(y=1∣x)</span>
Logistic 回归中使用的参数如下:
- 输入的特征向量:<span>x∈Rnx,x x \in R^{n_x} , x x∈Rnx,x</span><span>nx n_x nx</span><span>y∈0,1 y \in 0,1y∈0,1</span>
- 参数:权重:<span>w∈Rnx w \in R^{n_x}w∈Rnx</span><span>b∈R b \in R b∈R</span>
输出预测结果:<span>y^=σ(wTx+b)=σ(w1x1+w2x2+...+b)=σ(θTx)\hat{y} = \sigma(w^Tx+b)=\sigma(w_1x_1+w_2x_2+...+b)=\sigma(\theta^Tx) y^=σ(wTx+b)=σ(w1x1+w2x2+...+b)=σ(θTx)</span>
- Sigmoid 函数:<span>s=σ(wTx+b)=σ(z)=11+e−z s = \sigma(w^Tx+b) = \sigma(z) = \frac{1}{1+e^{-z}}s=σ(wTx+b)=σ(z)=1+e−z1</span>
- 如果<span>zzz</span>
- 如果<span>zzz</span>
<span>e−ze^{-z}e−z</span>
例如:
1.2.1.2 逻辑回归损失函数
损失函数(loss function)用于衡量预测结果与真实值之间的误差。最简单的损失函数定义方式为平方差损失:
<span>L(y^,y)=12(y^−y)2 L(\hat{y},y) = \frac{1}{2}(\hat{y}-y)^2L(y^,y)=21(y^−y)2</span>
逻辑回归一般使用<span>L(y^,y)=−(ylogy^)−(1−y)log(1−y^)L(\hat{y},y) = -(y\log\hat{y})-(1-y)\log(1-\hat{y}) L(y^,y)=−(ylogy^)−(1−y)log(1−y^)</span>
该式子的理解:
- 如果y=1,损失为<span>−logy^- \log\hat{y}−logy^</span><span>y^\hat{y} y^</span>
- 如果y=0,损失为<span>1log(1−y^)1\log(1-\hat{y})1log(1−y^)</span><span>y^\hat{y}y^</span>
损失函数是在单个训练样本中定义的,它衡量了在单个训练样本上的表现。代价函数(cost function)衡量的是在全体训练样本上的表现,即衡量参数 w 和 b 的效果,所有训练样本的损失平均值
<span>J(w,b)=1m∑i=1mL(y^(i),y(i))J(w,b) = \frac{1}{m}\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)}) J(w,b)=m1∑i=1mL(y^(i),y(i))</span>
1.2.2 梯度下降算法
目的:使损失函数的值找到最小值
方式:梯度下降
函数的梯度(gradient)指出了函数的最陡增长方向。梯度的方向走,函数增长得就越快。那么按梯度的负方向走,函数值自然就降低得最快了。模型的训练目标即是寻找合适的 w 与 b 以最小化代价函数值。假设 w 与 b 都是一维实数,那么可以得到如下的 J 关于 w 与 b 的图:
可以看到,成本函数 J 是一个凸函数,与非凸函数的区别在于其不含有多个局部最低。
参数w和b的更新公式为:
<span>w:=w−αdJ(w,b)dww := w - \alpha\frac{dJ(w, b)}{dw}w:=w−αdwdJ(w,b)</span><span>b:=b−αdJ(w,b)dbb := b - \alpha\frac{dJ(w, b)}{db}b:=b−αdbdJ(w,b)</span>
注:其中 α 表示学习速率,即每次更新的 w 的步伐长度。当 w 大于最优解 w′ 时,导数大于 0,那么 w 就会向更小的方向更新。反之当 w 小于最优解 w′ 时,导数小于 0,那么 w 就会向更大的方向更新。迭代直到收敛。
通过平面来理解梯度下降过程:
1.2.3 导数
理解梯度下降的过程之后,我们通过例子来说明梯度下降在计算导数意义或者说这个导数的意义。
1.2.3.1 导数
导数也可以理解成某一点处的斜率。斜率这个词更直观一些。
- 各点处的导数值一样
我们看到这里有一条直线,这条直线的斜率为4。我们来计算一个例子
例:取一点为a=2,那么y的值为8,我们稍微增加a的值为a=2.001,那么y的值为8.004,也就是当a增加了0.001,随后y增加了0.004,即4倍
那么我们的这个斜率可以理解为当一个点偏移一个不可估量的小的值,所增加的为4倍。
可以记做<span>f(a)da\frac{f(a)}{da}daf(a)</span><span>ddaf(a)\frac{d}{da}f(a)dadf(a)</span>
- 各点的导数值不全一致
例:取一点为a=2,那么y的值为4,我们稍微增加a的值为a=2.001,那么y的值约等于4.004(4.004001),也就是当a增加了0.001,随后y增加了4倍
取一点为a=5,那么y的值为25,我们稍微增加a的值为a=5.001,那么y的值约等于25.01(25.010001),也就是当a增加了0.001,随后y增加了10倍
可以得出该函数的导数2为2a。
- 更多函数的导数结果
函数 | 导数 |
---|---|
f(a)=a2f(a) = a^2f(a)=a2 | 2a2a2a |
f(a)=a3f(a)=a^3f(a)=a3 | 3a23a^23a2 |
f(a)=ln(a)f(a)=ln(a)f(a)=ln(a) | 1a\frac{1}{a}a1 |
f(a)=eaf(a) = e^af(a)=ea | eae^aea |
σ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}}σ(z)=1+e−z1 | σ(z)(1−σ(z))\sigma(z)(1-\sigma(z))σ(z)(1−σ(z)) |
g(z)=tanh(z)=ez−e−zez+e−zg(z) = tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}g(z)=tanh(z)=ez+e−zez−e−z | 1−(tanh(z))2=1−(g(z))21-(tanh(z))^2=1-(g(z))^21−(tanh(z))2=1−(g(z))2 |
1.2.3.2 导数计算图
那么接下来我们来看看含有多个变量的到导数流程图,假设<span>J(a,b,c)=3(a+bc)J(a,b,c) = 3{(a + bc)}J(a,b,c)=3(a+bc)</span>
我们以下面的流程图代替
这样就相当于从左到右计算出结果,然后从后往前计算出导数
- 导数计算
问题:那么现在我们要计算J相对于三个变量a,b,c的导数?
假设b=4,c=2,a=7,u=8,v=15,j=45
- <span>dJdv=3\frac{dJ}{dv}=3dvdJ=3</span>
增加v从15到15.001,那么<span>J≈45.003J\approx45.003 J≈45.003</span>
- <span>dJda=3\frac{dJ}{da}=3dadJ=3</span>
增加a从7到7.001,那么<span>v=≈15.001v=\approx15.001v=≈15.001</span><span>J≈45.003J\approx45.003 J≈45.003</span>
这里也涉及到链式法则
1.2.3.3 链式法则
- <span>dJda=dJdvdvda=3∗1=3\frac{dJ}{da}=\frac{dJ}{dv}\frac{dv}{da}=3*1=3dadJ=dvdJdadv=3∗1=3</span>
J相对于a增加的量可以理解为J相对于v*v相对于a增加的
接下来计算
- <span>dJdb=6=dJdududb=3∗2\frac{dJ}{db}=6=\frac{dJ}{du}\frac{du}{db}=3*2dbdJ=6=dudJdbdu=3∗2</span>
- <span>dJdc=9=dJdududc=3∗3\frac{dJ}{dc}=9=\frac{dJ}{du}\frac{du}{dc}=3*3dcdJ=9=dudJdcdu=3∗3</span>
1.2.3.4 逻辑回归的梯度下降
逻辑回归的梯度下降过程计算图,首先从前往后的计算图得出如下
- <span>z=wTx+bz = w^Tx + bz=wTx+b</span>
- <span>y^=a=σ(z)\hat{y} =a= \sigma(z)y^=a=σ(z)</span>
- <span>L(y^,y)=−(yloga)−(1−y)log(1−a)L(\hat{y},y) = -(y\log{a})-(1-y)\log(1-a) L(y^,y)=−(yloga)−(1−y)log(1−a)</span>
那么计算图从前向过程为,假设样本有两个特征
问题:计算出<span>JJJ</span><span>zzz</span>
<span>dz=dJdadadz=a−ydz = \frac{dJ}{da}\frac{da}{dz} = a-ydz=dadJdzda=a−y</span>
- <span>dJda=−ya+1−y1−a\frac{dJ}{da} = -\frac{y}{a} + \frac{1-y}{1-a}dadJ=−ay+1−a1−y</span>
- <span>dadz=a(1−a)\frac{da}{dz} = a(1-a)dzda=a(1−a)</span>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。