2019-04-22 20:10:24 NGUever15 阅读数 370
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40478 人正在学习 去看看 唐宇迪

————————————————————————————
原文发表于夏木青 | JoselynZhao Blog,欢迎访问博文原文
————————————————————————————

深度学习教程与实战案列系列文章


深度学习 | 绪论
深度学习 | 线性代数基础
深度学习 | 机器学习基础
深度学习 | 实践方法论
深度学习 | 应用
深度学习 | 安装conda、opencv、pycharm以及相关问题
深度学习 | 工具及实践(TensorFlow)
深度学习 | TensorFlow 命名机制和变量共享、变量赋值与模型封装
深度学习 | TFSlim介绍
深度学习 | TensorFlow可视化
深度学习 | 训练及优化方法
深度学习 | 模型评估与梯度下降优化
深度学习 | 物体检测
深度学习| 实战1-python基本操作
深度学习 | 实战2-TensorFlow基础
深度学习 | 实战3-设计变量共享网络进行MNIST分类
深度学习 | 实战4-将LENET封装为class,并进行分类
深度学习 | 实战5-用slim 定义Lenet网络,并训练测试
深度学习 | 实战6-利用tensorboard实现卷积可视化
深度学习 | 实战7- 连体网络MINIST优化
深度学习 | 实战8 - 梯度截断
深度学习 | 实战9- 参数正则化


深度学习简介

应用

  • 视频图像
  • 语音 : 语音识别、语音合成、声纹识别
  • 自然语言处理:机器翻译、信息检索、舆情分析
  • 控制决策:游戏

深度学习基本原理

深度学习本质

机器学习:学习如何映射 F(x): 数据 ￿ 结果
数据规律复杂——F(x) 复杂
一把学出 F(x) 有点难,能不能简化?
在这里插入图片描述

深度学习vs传统机器学习

机器学习:手工设计特征和模型,并学习数据分布
深度学习:侧重从大量数据中直接学习高维、复杂的数据特征
在这里插入图片描述
机器学习: 实现人工智能的方法
深度学习: 机器学习的一种特殊形式,是一种表示学习
在这里插入图片描述

深度学习基本原理

来源:人工神经网络
实质:非常“深”的人工神经网络
目的:学习数据-> 特征
特点:多层表达,高层复杂特征是底层简单特征的抽象
在这里插入图片描述

深度学习发展的原因

  • 数据量:互联网提供了大量的数据,与日俱增的数据量推动了深度学习的发展。
  • 计算能力
    1. 摩尔定律
    2. 针对深度学习的GPU
    3. 人工智能芯片(TPU、Tesla)
  • 促进构建更深网络的算法发展:Relu、BP、Dropout

深度学习小结

  • 概念:源于神经网络,现在是一系列能够用来构建可组合可微分的体系结构的技术和方法
  • 相比传统机器学习:适用于从大量数据中学习复杂特征
  • 效果:实实在在的成效,突破弱人工智能,但强人工智能还远未达 到

Python 基础

Python特性

  • 开源的、解释性,面向对象编程语言
  • 优雅的语法,可读性强
  • 丰富的库,可处理各种工作
  • 支持类和多层继承等面向对象编程技术
  • 跨平台,如 Unix,Windows,MacOS 等等

使用python的知名项目

  • Reddit:社交分享网站,最早使用 Lisp 开发,在 2005 年转为 Python
  • Dropbox:文件分享服务
  • 豆瓣网:文青大本营
  • BitTorrent:BT 下载软件客户端
  • Civilization IV :《文明 4》
  • Google Groups、Gmail、Google Maps 等

搭建python编程环境

集成开发环境

  • Visual Studio:VS 下集成 python 开发环境, 目前仅支持 Windows, 调试、编辑和 C++ 在 VS 中类似
  • PyCharm:JetBrains 开发的 Python IDE,支持 MacOS、Windows、 Linux 等系统;
  • PyCharm 功能:调试、语法高亮、Project 管理、代码跳转、自动完 成、单元测试、版本控制…

安装Python

  • Anaconda: 可以便捷获取和管理 Python 库。包含 conda、Python 在内的超过 180 个科学库及其依赖项
  • 适用平台:Windows,macOS,Linux
  • 推荐使用对应 Python 3.6 的版本

只要装好了anaconda ,python就装好了。
验证是否装好了

conda --version

Python数据类型

Python基本数据类型

数字类型和布尔类型

  • 无需声明类型,系统根据变量赋值语句记性判定。

字符串类型

  • 用于深度学习程序中配置数据路径等信息
  • 两种定义方式,双引号和单引号

Python 容器类型

在深度学习的实践中,数据集扮演重要的角色
假设数据集 D 包含 N 个训练样本,每个样本为三维浮点数,并对 应一维整形标签
(1.73, 3.86, 2.50)-> 1 (2.56, 9.75, 3.21)-> 2
… 用基本数据类型难以定义 使用容器类型

列表(List)和元组(Tuple)

将list转为tuple

mytuple  = tuple(myList1)

列表和元组的设计目的

  • 列表:用于存储需要经常修改的内容
  • 元组:用于存储不希望改变的内容

列表和元组的具体区别:

  • 初始化后,列表可以改变而元组不可改变
  • 元组通常由不同的数据组成,列表是相同类型的数据队列
  • 元组表示的是结构,列表表示的是顺序
  • 元组可以作为字典的 key,但是列表不行

元组使用案例: 定义数据集 D 中的单个训练样本:
表示结构
不可改变
例如:(1.73, 3.86, 2.50)、(2.56, 9.75, 3.21) 等

列表使用案例: 定义整个数据集 D:
数据列表:包含所有训练样本元组:[(1.73, 3.86, 2.50), (2.56, 9.75,3.21), …]
标签列表:包含所有标签:[1, 2, …]
表示顺序
可以增减或修改数据

列表和元组的索引访问:
列表和元组的索引都是从0开始。

列表和元组的分片访问:

  • 基本方法:myList[0:3:1] [起点元素索引: 终点元素索引: 跨度]
  • 左闭右开:起点元素包含在结果中,终点元素不包含在结果中
  • 负数索引:从后往前计数,最后一个元素索引为-1

在这里插入图片描述
在这里插入图片描述
列表元素的批量修改:
在这里插入图片描述

字典

  • 存储键(key)值(value)对
  • 字典数据能够使用键名快速取回、添加、删除、编辑值
  • 数据集 D 也可以使用字典表示
    1. 键:训练数据(元组)
    2. 值:标签(整型数)
    在这里插入图片描述
    访问和修改字典:
  • 访问:通过键访问值
  • 修改:键不可直接修改,值可以修改
  • 添加键值对:直接添加
  • 删除键值对:del

通过[]来取键。
遍历字典:
在这里插入图片描述
字典类型下的更多函数:
在这里插入图片描述
pop之后就会从字典中删除。

集合

  • 使用大括号或者 set() 函数创建集合,
  • 注意:创建一个空集合必须用 set() 而不是,因为是用来创建一个 空字典
  • 可以使用列表创建集合
  • 在深度学习中可用来统计数据集类别数量
Labels_set= set(Labels)

集合的运算:
在这里插入图片描述
集合的操作:

  • 添加元素 s.add( x )
  • 移除元素 s.remove( x )
  • 计算集合元素个数 len(s)
  • 清空集合 s.clear()
  • 判断元素是否在集合中存在 x in s
  • 通过将数据集标签列表转为集合,可以获取类别数量等信息

Python 函数

Python使用def关键字创建函数:

def function_name(arg1,arg2...):
		# statement inside function

Python 函数仅支持返回一个值,可以通过返回元组的方式变相实现返回多个值。

在这里插入图片描述

常用Python库的使用

利用常用Python库处理股票指数预测问题

股票指数预测:

  • 通过第前 300 天的股市数据:X, 预测当天的收盘价: Y, 既是X→Y
  • 第前 300 天的股市数据 X = [x1, x2, …, xn]T 是包含多个特征的向 量,特征包括:
  1. 收盘价 x1
  2. 最高价与最低价的变化百分比 x2
  3. 收盘价与开盘价的变化百分比 x3
  4. 成交量 x4

线性回归

线性回归的定义:
在统计学中,线性回归 (Linear regression) 是利用称为线性回归方 程的最小二乘函数对一个或多个自变量和因变量之间关系进行线 性建模的一种回归分析
只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归

多元线性回归的形式:
在这里插入图片描述
需要解决的问题是多元回归。

Python 库

标准库 :
pprint,sys,os,…
第三方库
Numpy Scipy Matlibplot Scikit-learn Pandas …

第三方库配置

第三方库安装

conda install  <libname>

第三方库更新

conda update <libname>

第三方库的导入

import numpy
import numpy as np
from numpy import array

案例:使用第三方库进行股价预测

流程

在这里插入图片描述
Pandas 库:

  • 提供快捷处理结构化数据的大量数据结构和函数
  • 兼具高性能数据计算功能以及电子表格和关系型数据库的灵活数据处理功能
  • 提供大量适用于金融数据的高性能时间序列分析功能和工具

数据加载 (Pandas处理表格数据)

导入pandas 模块:

import pandas as pd

pandas.read_csv 模块:加载 csv 文件:

df = pd.read_csv(”googlestock.csv”)

df 数据类型:pandas.core.frame.DataFrame

将 df 修改为按时间戳索引,以便后续处理:

df[’Date’] = pd.to_datetime(df[’Date’]) 
df.set_index(”Date”, inplace=True)

将Date项变为索引项,不再是真正的数据
在这里插入图片描述
** 预处理 DataFrame 类型数据:**

df[’HL_PCT’] = (df[’Adj. High’] - df[’Adj.Close’]) / df[’Adj. Close’]
* 100.0 # 最高价与最低价的变化百分比

df[’PCT_change’] = (df[’Adj. Close’] - df[’Adj.Open’]) / df[’Adj.Open’] * 100.0 # 收盘价与开盘价的变化百分比

df = df[[‘Adj. Close’, ‘HL_PCT’, ‘PCT_change’,‘Adj.Volume’]] # 最终进行预测时需要的特征

df[‘label’] = df[‘Adj. Close’].shift(300) # 标签:以收盘价为预测指标,每一项特征对应的标签为 300 个时间片之后的股价

得到的数据结果:
在这里插入图片描述

数据格式转换(Numpy)

NumPy

python 科学计算的基础包

  • Numerical Python
  • 快速高效的多维数组对象 ndarray
  • 用于对数组执行元素级计算及直接对数组执行数学运算的函数
  • 用于读写磁盘上基于数组的数据集工具
  • 线性代数运算、傅里叶变换、随机数生成
  • 将 C、C++、Fortran 代码集成到 Python 工具
  • 算法之间传递数据的容器

ndarray可以作为数据类型转化的桥梁。

NumPy 数组的创建:向 array 中传入一个 list:

  • 一维数组: np.array([1,2,3])
  • 二维数组: np.array([[1,2,3],[4,5,6]])
  • 随机数组: x = np.random.rand(10)

显示数组元素的属性
在这里插入图片描述
改变数组元素类型
在这里插入图片描述
改变数组的尺寸:reshape方法
在这里插入图片描述
将reshape 的某个参数指定位-1时,numpy会根据实际数组元素个数自动替换-1 为具体的大小。
常用于数据量比较大的时候。
在这里插入图片描述
元素所以(基于列表和元组的索引方式):从零开始,左闭右开。
在这里插入图片描述
使用布尔型索引
在这里插入图片描述
使用条件索引
在这里插入图片描述
元素修改
在这里插入图片描述
多维数组的索引和切片
在这里插入图片描述
多维数组的布尔索引和切片
在这里插入图片描述
ufunc操作:可对数组的每个元素进行操作的函数
在这里插入图片描述
四则运算符同样具有ufunc属性
在这里插入图片描述
比较操作
在这里插入图片描述
矩阵乘法
在这里插入图片描述
文件存取(假设有数组array为a,类型为int32)
在这里插入图片描述
将 DataFrame 的数据转换成 Numpy 矩阵,并分为数据和标签,以 便下一步处理
在这里插入图片描述
然后可以利用 Scikit-learn 等第三方库对 X 和 y 做进一步处理

数据预处理(Scikit-learn)

  • python 机器学习库
  • 进行数据挖掘和数据分析的简单而高效的工具
  • 基于 NumPy,SciPy 和 matplotlib 构建
  • 支持数据预处理、降维、回归、聚类、分类等操作

在这里插入图片描述
案例 1:数据预处理
sklearn.preprocessing.scale 模块:数据零均值化和单位方差化在这里插入图片描述
案例 2:数据特征降维
sklearn.decomposition.PCA 模块:PCA 数据降维
在这里插入图片描述
案例 3:数据集处理
sklearn. model_selection.train_test_split 模块:快速划分训练集与测 试集
在这里插入图片描述
案例 4:机器学习模型
sklearn.linear_model. LinearRegression 模块:线性回归
举例:用线性回归做直线拟合 (注意:之前股票回归的线性回归是 做多元数据预测)
在这里插入图片描述

股价预测程序:对调用 Numpy 生成的数据和标签矩阵 X 和 y,使 用 Scikit-learn 进行进一步处理:
在这里插入图片描述

完成数据规范化和训练测试集划分之后,调用线性回归模块进行
回归预测
在这里插入图片描述

clf = sklearn.linear_model.LinearRegression() # 定 义 线 性回归器
clf.fit(X_train, y_train) # 开 始 训 练
accuracy = clf.score(X_test, y_test) # 测 试 并 得 到 测 试 集性能
forecast_set = clf.predict(X_lately) # X_lately: 一 部 分不包括在训练和测试集中的数据,用于生成股价预测结果

结果可视化(Matplotlib)

完成线性回归训练和预测之后,下一步需要输出预测结果

结果可视化工具(matplotlib)

  • matplotlib.image 模块:图像操作
  • matplotlib.pyplpot 模块:显示图像
    在这里插入图片描述

实现数据可视化

在这里插入图片描述

股价预测程序的结果绘制分成两个部分:
(1)已有的收盘价格数 据;
(2)预测的未来收盘价
在这里插入图片描述
绘制出来的效果
在这里插入图片描述

第三方库:Scipy

  • 基于 Numpy 之上,操控 Numpy 数组进行科学计算

  • 专门解决科学计算中各种标准问题域的包的集合

  • 数值积分、矩阵分解、信号处理、稀疏矩阵和线性系统求解器、统 计工具等。

    1. scipy.io:加载和保存 MATLAB 文件
    2. scipy.linalg:包含一系列线性代数操作
    3. Scipy.optimize:优化和拟合

Scipy.io 模块:保存和加载 MATLAB 文件 (mat)
在这里插入图片描述

  1. scipy.linalg 模块:标准的线性代数操作
    scipy.linalg.det() 函数:计算方阵的行列式
    scipy.linalg.inv() 函数:矩阵求逆
  2. scipy.fftpack:快速傅立叶变换

scipy.optimize:优化和拟合
在这里插入图片描述
绘制效果如下:
在这里插入图片描述

2018-08-28 10:30:13 u012089823 阅读数 123
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40478 人正在学习 去看看 唐宇迪

学习深度学习的原因

  • 深度学习可以用更多的数据或是更好的算法来提高学习算法的结果。对于某些应用而言,深度学习在大数据集上的表现比其他机器学习(ML)方法都要好。
  • 性能表现方面,深度学习探索了神经网络的概率空间,与其他工具相比,深度学习算法更适合无监督和半监督学习,更适合强特征提取,也更适合于图像识别领域、文本识别领域、语音识别领域等。
  • 为什么深度学习会如此被热衷,因为它不以任何损失函数为特征,也不会被特定公式所限制,这使得该算法对科学家们更为开放,它能以比其他传统机器学习工具更好的方式进行使用和扩展。

深度学习的实质

  • 是通过构建具有很多隐层的机器学习模型和海量的训练数据,来学习更有用的特征,从而最终提升分类或预测的准确性。因此,“深度模型”是手段,“特征学习”是目的。区别于传统的浅层学习,深度学习的不同在于:1)强调了模型结构的深度,通常有5层、6层,甚至10多层的隐层节点;2)明确突出了特征学习的重要性,也就是说,通过逐层特征变换,将样本在原空间的特征表示变换到一个新特征空间,从而使分类或预测更加容易。与人工规则构造特征的方法相比,利用大数据来学习特征,更能够刻画数据的丰富内在信息。

DNN,深度神经网络

  • 特指全连接的神经元结构,并不包含卷积单元或是时间上的关联
  • 特长对相对独立的一个样本进行训练

RNN,循环神经网络

  • 训练样本输入是连续的序列,且序列的长短不一,比如基于时间的序列:一段连续的语音,一段连续的手写文字。这些序列比较长,且长度不一,比较难直接的拆分成一个个独立的样本来通过DNN/CNN进行训练
  • 但是 RNN有致命的缺陷,只能知道记忆短暂的信息,对于距离相距很远的信息记忆能力差。比如我们做完型填空时,可能需要整合全文来填某一个句子,比如 I grew up in China….此处省略一万字.....I speak fluent _____ . 如果 RNN 只知道邻近的几个单词,可能它会知道此处需要填写一门语言,但至于应该填什么,就需要找到更远前的信息,直到 找到 China 才行。这种需要寻找相距很远信息的情况,实际上非常常见,此时需要LSTM。

LSTM,长短期记忆网络

  • 是 RNN 的一种特殊形式,它被广泛应用在翻译语言、控制机器人、图像分析、文档摘要、语音识别图像识别、手写识别、控制聊天机器人、预测疾病、点击率和股票、合成音乐等等任务
  • 是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件

CNN,卷积神经网络

  • 优势:1、神经元之间的连接是属于非全连接的(稀疏连接) 2、同一层中某些神经元之间连接的权重是共享的(即相同的),它的非全连接和权值共享的网络结构使之更类似于生物 神经网络,降低了网络模型的复杂度(对于很难学习的深层结构来说,这是非常重要的),减少了权值的数量
  • 卷积网络是为识别二维形状而特殊设计的一个多层感知器,这种网络结构对平移、比例缩放、倾斜或者共他形式的变形具有高度不变性
  • 是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现
  • 卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成
  • CNN有如下约束:
  1.  特征提取(C):每一个神经元从上一层的局部接受域得到突触输人,因而迫使它提取局部特征。一旦一个特征被提取出来, 只要它相对于其他特征的位置被近似地保留下来,它的精确位置就变得没有那么重要了。
  2. 特征映射(S):网络的每一个计算层都是由多个特征映射组成的,每个特征映射都是平面形式的。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。平面中单独的神经元在约束下共享相同的突触权值集,这种结构形式具有如下的有益效果:a.平移不变性。b.自由参数数量的缩减(通过权值共享实现)。
  3. 子抽样(供特征映射使用):每个卷积层后面跟着一个实现局部平均和子抽样的计算层,由此特征映射的分辨率降低。这种操作具有使特征映射的输出对平移和其他 形式的变形的敏感度下降的作用。

      (Ci----->求和,加权值,加偏置,通过一个Sigmoid函数------>Si)*n----->被光栅化的数据---->输入到传统的神经网络->输出

       // coeff 是可训练的权重,sw 、sh 是采样窗口的尺寸,i,j,k是input的维度,以下公式是求卷积的核心思想

       sub[i][j/sw][k/sh] += input[i][j][k]*coeff[i];

 BP(Back propagation)算法存在的问题:

(1)梯度越来越稀疏:从顶层越往下,误差校正信号越来越小;

(2)收敛到局部最小值:尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生);

(3)一般,我们只能用有标签的数据来训练:但大部分的数据是没标签的,而大脑可以从没有标签的的数据中学习;

CNN详细讲解

CNN基于python+theano代码实现

2019-12-02 10:53:46 jiliguluguji 阅读数 21
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40478 人正在学习 去看看 唐宇迪

梯度下降算法的改进

  • 目标
    • 了解深度学习遇到的一些问题
    • 了解批梯度下降与MiniBatch梯度下降的区别
    • 了解指数加权平均的意义
    • 了解动量梯度,RMSProp,Adam算法的公式意义
    • 知道学习率衰减方法
    • 知道参数初始化策略的意义
  • 应用
    • 暂无
  • 在大数据领域的发展原因
    深度学习难以在大数据领域发挥的最大效果的一个原因是,在巨大数据集的基础上面进行训练的速度很慢。而优化算法能够帮助我们快速的训练模型,提高计算效率。

优化遇到的问题

  • 梯度消失
  • 局部最优

梯度消失

  • 梯度函数上面将会出现指数级递增或者递减的情况分别称为梯度爆炸或者梯度消失
    在这里插入图片描述
    • 对于W[ l ]的值大于1的情况,激活函数的值将以指数级递增
    • 对于于W[ l ]的值小于1的情况,激活函数的值将以指数级递减
  • 计算梯度的时候,梯度函数也会呈现指数级的递增和递减,导致训练难度上升,步长越来越小,时间却越来越多
  • 举例
    如上图,如果神经网络没有激活,偏置也为0,那么正向传播的计算公式的为
    • y = W[10]*…W[2]*W[1]*W[0]*x,对应的就会将输出值变得指数爆炸或者指数减小

局部最优

在这里插入图片描述
全局最低点和局部最优点

  • 鞍点:函数的倒数为零,但不是轴上面的局部最优点。通常梯度为零的点,而非局部最优点。减小损失的难度也来自于误差曲面的鞍点,而不是局部最优点。如下点图
    两个的交叉点

总结

  • 在训练较大的神经网络,存在大量的参数,并且成本函数被定义为在较高的维度空间时,困在极差的局部最优基本不会发生。
  • 鞍点附近的平稳段会使学习的效率非常缓慢,而这需要后面的动量梯度下降法,RMSProp,Adam算法进行加速学习,能够尽快帮助我们走出平稳期
  • 解决策略
    • 初始化参数策略(手写的随机初始化,较小值)
    • Mini梯度下降法
    • 梯度下降算法优化
    • 学习率衰减

1. 梯度下降算法

  1. 批梯度下降算法(Betch Gradient Descent)
    1. 定义:批梯度下降法(btach),即同时处理整个数据集
    2. 缺点: 数据集大的时候,处理数据慢
  2. Mini-Batch Gradient Descent
    1. 定义:每次处理固定大小的数据集
    2. 种类:大小为1时,即为随机梯度下降法(SGD)
  3. 两者的区别
    两个梯度下降法代价函数的变化趋势
  4. 影响
    1. Batch:迭代速度慢,训练过程慢
    2. SGD(随机):有很多噪声,但是速度很快,大型数据或者大型网络中导致一直在鞍点附近徘徊。
      在这里插入图片描述

大小选择

  • 训练样本的大小比较小,选择batch梯度下降
  • 样本比较大时,选择Mini-Betch梯度下降法。(某论文)为了和计算机的信息存储方式相适应,代码在Mini-Batch大小为2的幂次是运行要快一点,典型的大小有2^6 , 27,28等,Mini-Betch的大小要符合CPU/GPU内存

2. 指数加权算法

  • 属于梯度下降算法内部的优化
  • 定义:属于一种常用的序列数据处理方式,通常在序列场合如金融、温度变化等序列来分析
    在这里插入图片描述
    红色的为加权数为0.9平均之后的效果,紫色的为权重为0.98,当β的值越大,求取平均利用的天数越多,曲线自然就会越平滑而且滞后,这些系数被称为偏差修正
  • 指数移动平均值
    • 参数越大,曲线越平滑
    • 参数越小,曲线越曲折(波动越频繁)

3. 动量梯度下降法

  • 定义:计算梯度的指数加权平均数,并利用该值来更新参数值
    在这里插入图片描述
    在这里插入图片描述
  • 通过累加我过去的梯度值来减小抵达最小路径上面的波动
  • 形象的理解:小球在向下的过程中会有加速度,导致越来越快,由于β的存在,不会使小球一直加速下去

4. RMSProp算法

  • 定义: 对梯度进行指数加权平均的举出上,引入平方和平方根
    在这里插入图片描述
    其中ε是一个非常小的数,防止分母太小导致不稳定dW和db会比较大,从而sdW会比较大,从而使结果更加准确,有助于减小抵达最小路径的上的摆动,并允许使用更大的学习率,加速算法学习速度

5. Adam算法

  • 将Momentum和RMSProp算法结合,达到缓和波动

总结

  • 学习敏感率: Momentum>MRSProp>Adam
  • 目的:为了限制梯度更新的波动

学习率的衰减

  • 学习率的控制
    • 前期的学习率较大
    • 接近最优值的学习率减小
    • 最常用的学习率衰减 α = 1/(1 + decay_rate * epoch_num)* a0
    • 指数衰减 a = 0.95^(epoch_num) * a0

其他非算法优化算法

  • 对网络的输入特征进行标准化,能够缓解梯度消失或者梯度爆炸
  • 迭代次数较少的获取得到全局最优解

总结(最终)

  • 掌握参数初始化策略
  • 掌握Mini-Batch的特点以及优势
  • 掌握梯度下降算法的优化的目的以及效果
    • 掌握指数移动平均的好处
    • 掌握Monentum、MRSProp、Adam算法的特点
    • 掌握学习率衰减的算法
  • 掌握标准化输入带来网络学习速度的提升
2017-08-31 10:34:59 qq_35082030 阅读数 816
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40478 人正在学习 去看看 唐宇迪

0. 写在前面

在这一章中,我们主要讨论的是什么让深度学习流行起来的原因,以及在这门课中,我们将会学到什么。

1.深度学习流行起来的原因

深度学习的理论都已经存在几十年了,包括从1982年开始的反向传播算法开始,或者是更早的感知机模型,那么为什么直到最近深度学习才开始流行起来呢。首先我们先看一个图:
这里写图片描述
这张图的x轴表示数据量的大小(这里的数据指的是有标注的数据),从左到右越来越大。y轴表示性能表现,从下到上越来越大,图中的红线表示传统的机器学习方法,可以看到,传统的机器学习算法随着数据量的增加有着性能瓶颈,而黄线则表示一个小规模的神经网络模型,蓝色的表示一个中规模的神经网络模型,绿色的表示大规模的神经网络模型。这样我们可以看到,虽然每个模型有着自己的瓶颈,但是神经网络模型是乐高积木一样,可以不断的变大,这样性能就可以不断的提升,如果你想达到右上角黑点的那个层次的性能表现(例如95%+的准确率),那基本上深度学习模型是你的首选。

这里还要提的一点是,在小规模数据集中,各个算法的性能表现都是势均力敌的,可能更多的受到特征和算法技巧上的影响。只有在大规模的数据下,神经网络模型才表现出稳定的优势。

事实上,深度学习流行的原因不仅仅是数据,还有计算力和算法。

在计算力上,我们可以看到越来越快的CPU,甚至更加适合深度学习的GPU,以及最新产物TPU,它把张量计算融入到了硬件中,这样就可以更加迅速的实现深度学习模型了。

在算法上,越来越多的算法上的创新推动着深度学习的速度越来越快。例如吴恩达举例的激活函数从Sigmoid函数转换到Relu函数,这样可以避免梯度消失问题,从而增加训练速度。

这一点是很重要的,因为训练速度意味着深度学习的迭代速度,也就是进化速度。整个深度学习的迭代周期如下:
这里写图片描述
包括是三个部分:想法、编码和实验。如果实验过程很快,那么我们就可以更快的根据实验结果改进想法,从而改变编码,进行下一次实验。这样深度学习就会发展很快,从而更具有生产力。当然算法上的创新主要是为了提升训练速度(包括大名鼎鼎的1bit算法)。

2.未来计划

目前总共开设了5门课(4,5还未开放)。我们目前是在第一门,第一门课最后是让我们可以能够搭建一个神经网络模型。而第一门课则有4周时间。

第一周,我们进行简单的介绍,正如第一讲和这一讲的内容,能够让我们知道什么是神经网络和深度学习。

第二周,我们将介绍一些神经网络编程基础。了解神经网络的结构和算法过程,以及如何实现。接下来可能会进行自己实现算法。

第三周,将会编写含有隐含层的神经网络。这样才算一个真正的具有神经网络的特性。

第四周,将会实现一个多层的神经网络。

我想说的是,这和Keras不同之处在于,你可以更加清楚的了解整个神经网络的运行过程,而Keras只需要让你专注于模型,属于工程类,而真正要懂神经网络的话,还是需要自己从小开始搭建,尽管目前有Tensorflow、CNTK等框架供你实现,但是你还是要知道一些细节和原理。

3. 小结

这仅仅是一个开始,接下来才是干货。当然这仅仅是碎片式学习,我们也仅仅像正常上课一样,每次只上一点内容,这样方便大家阅读和学习。

2017-10-29 11:14:19 m0_37885286 阅读数 5710
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40478 人正在学习 去看看 唐宇迪

最近开始学习比较火的深度学习框架:TensorFlow,主要原因是看猪场招聘需要熟练TensorFlow框架(有点急功近利,嘿嘿),于是开始提前做准备。以下是读《TensorFlow:实战Google深度学习框架》的总结


1、人工智能、机器学习、深度学习三个概念的区分

首先,想了解深度学习框架先要区分人工智能、机器学习、深度学习这三个概念:

1.1 人工智能的概念
人工智能主要是一类非常广泛的问题,它主要解决一些人类通过直觉可以很快解决而计算机目前却很难解决的问题,这些问题包括自然语言理解、图像识别、语音识别等等。

1.2 机器学习的概念
卡内基梅隆大学的Tom Michael Mitchell教授在1997年出版的书籍Machine Learning 中对机器学习进行过非常专业的定义,这个定义在学术界内被多次引用。具体定义为:“如果一个程序可以在任务T上,随着经验E的增加,效果P也可以随之增加,则称这个程序可以从经验中学习
举例说明,比如在垃圾邮件分类问题中,“一个程序”指的是需要用到的机器学习算法,比如逻辑回归算法:“任务T”是指区分垃圾邮件的任务;“经验E”为已经区分过是否为垃圾邮件的历史邮件,在监督式机器学习问题中,这也被称之为训练数据;“效果P”为区分垃圾邮件任务的正确率

1.3 深度学习的概念
深度学习是机器学习的一个分支。深度学习解决的核心问题之一就是自动地将简单的特征组合成更加复杂的特征,并使用这些组合特征解决问题。深度学习除了可以从简单特征中提取更加复杂的特征,还可以学习特征和任务之间的关联。下图展示了深度学习和传统机器学习在流程上的差异。
这里写图片描述

形象的来说的话,就是人工智能的范围>机器学习>深度学习

2、深度学习的应用

深度学习最早兴起于图像识别,但是在短短几年时间内,深度学习推广到了机器学习的各个领域。

2.1 计算机视觉
计算机视觉是深度学习技术最早实现突破性成就的领域。最早是应用在图像分类比赛ILSVRC(ImageNet Large Scale Visual Recognition Challenge),深度学习AlexNet赢得ILSVRC的冠军。
之后应用于物体识别,人脸识别,光学字符识别等。

2.2 语音识别
深度学习之所以能在语音识别领域中完成这样的技术突破,最主要的原因是它可以自动地从海量数据中提取更加复杂且有效

的特征,而不是如高斯混合模型中需要人工提取特征。
基于深度学习的语音识别已被应用到了各个领域,如:苹果公司推出的Siri系统。

2.3 自然语言处理
深度学习已经在语言模型、机器翻译、词性标注、实体识别、情感分析、广告推荐以及搜索排序等方向上取得了突出成就。

2.4 人机博弈
比如:AlphaGo以总分比4:1战胜了韩国棋手李世石。然后,AlphaGo的开发团队DeepMind又打算和暴雪公司合作推出星际争霸2的人工智能系统。

3、深度学习工具TensorFlow的主要功能和特点

TensorFlow是谷歌于2015年11月9日正式开源的计算框架。TensorFlow计算框架可以很好地支持深度学习的各种算法。

关于TensorFlow平台本身的技术细节可以参考谷歌的论文TensorFlow:Large-Scale Machine Learning on Heterogeneous Distributed Systems.

没有更多推荐了,返回首页