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

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

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

————————————————————————————
原文发表于夏木青 | 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 阅读数 107
  • 机器学习&深度学习系统实战!

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

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

学习深度学习的原因

  • 深度学习可以用更多的数据或是更好的算法来提高学习算法的结果。对于某些应用而言,深度学习在大数据集上的表现比其他机器学习(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代码实现

2018-09-17 21:10:32 eo63y6pKI42Ilxr 阅读数 436
  • 机器学习&深度学习系统实战!

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

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

摘要:深度学习背后的主要原因是人工智能应该从人脑中汲取灵感。本文就用一个小例子无死角的介绍一下深度学习!


人脑模拟


深度学习背后的主要原因是人工智能应该从人脑中汲取灵感。此观点引出了“神经网络”这一术语。人脑中包含数十亿个神经元,它们之间有数万个连接。很多情况下,深度学习算法和人脑相似,因为人脑和深度学习模型都拥有大量的编译单元(神经元),这些编译单元(神经元)在独立的情况下都不太智能,但是当他们相互作用时就会变得智能。


我认为人们需要了解到深度学习正在使得很多幕后的事物变得更好。深度学习已经应用于谷歌搜索和图像搜索,你可以通过它搜索像“拥抱”这样的词语以获得相应的图像。-杰弗里·辛顿


神经元


神经网络的基本构建模块是人工神经元,它模仿了人类大脑的神经元。这些神经元是简单、强大的计算单元,拥有加权输入信号并且使用激活函数产生输出信号。这些神经元分布在神经网络的几个层中。


640?wx_fmt=png

inputs 输入 outputs 输出 weights 权值 activation 激活


人工神经网络的工作原理是什么?


深度学习由人工神经网络构成,该网络模拟了人脑中类似的网络。当数据穿过这个人工网络时,每一层都会处理这个数据的一方面,过滤掉异常值,辨认出熟悉的实体,并产生最终输出。


640?wx_fmt=png


输入层:该层由神经元组成,这些神经元只接收输入信息并将它传递到其他层。输入层的图层数应等于数据集里的属性或要素的数量。输出层:输出层具有预测性,其主要取决于你所构建的模型类型。隐含层:隐含层处于输入层和输出层之间,以模型类型为基础。隐含层包含大量的神经元。处于隐含层的神经元会先转化输入信息,再将它们传递出去。随着网络受训练,权重得到更新,从而使其更具前瞻性。


神经元的权重


权重是指两个神经元之间的连接的强度或幅度。你如果熟悉线性回归的话,可以将输入的权重类比为我们在回归方程中用的系数。权重通常被初始化为小的随机数值,比如数值0-1。


前馈深度网络


前馈监督神经网络曾是第一个也是最成功的学习算法。该网络也可被称为深度网络、多层感知机(MLP)或简单神经网络,并且阐明了具有单一隐含层的原始架构。每个神经元通过某个权重和另一个神经元相关联。


该网络处理向前处理输入信息,激活神经元,最终产生输出值。在此网络中,这称为前向传递。


640?wx_fmt=png

inputlayer 输入层   hidden layer 输出层  output layer 输出层


激活函数


激活函数就是求和加权的输入到神经元的输出的映射。之所以称之为激活函数或传递函数是因为它控制着激活神经元的初始值和输出信号的强度。


用数学表示为:


640?wx_fmt=png


我们有许多激活函数,其中使用最多的是整流线性单元函数、双曲正切函数和solfPlus函数。

激活函数的速查表如下:


640?wx_fmt=png


反向传播


在网络中,我们将预测值与预期输出值相比较,并使用函数计算其误差。然后,这个误差会传回这个网络,每次传回一个层,权重也会根绝其导致的误差值进行更新。这个聪明的数学法是反向传播算法。这个步骤会在训练数据的所有样本中反复进行,整个训练数据集的网络更新一轮称为一个时期。一个网络可受训练数十、数百或数千个时期。


640?wx_fmt=png

prediction error 预测误差


代价函数和梯度下降


代价函数度量了神经网络对给定的训练输入和预期输出“有多好”。该函数可能取决于权重、偏差等属性。


代价函数是单值的,并不是一个向量,因为它从整体上评估神经网络的性能。在运用梯度下降最优算法时,权重在每个时期后都会得到增量式地更新。


兼容代价函数


用数学表述为差值平方和:


640?wx_fmt=png

target 目标值 output 输出值


权重更新的大小和方向是由在代价梯度的反向上采取步骤计算出的。


640?wx_fmt=png

其中η 是学习率


其中Δw是包含每个权重系数w的权重更新的向量,其计算方式如下:


640?wx_fmt=png

target 目标值 output 输出值


图表中会考虑到单系数的代价函数


640?wx_fmt=png

initial weight 初始权重 gradient 梯度 global cost minimum 代价极小值


在导数达到最小误差值之前,我们会一直计算梯度下降,并且每个步骤都会取决于斜率(梯度)的陡度。


多层感知器(前向传播)


这类网络由多层神经元组成,通常这些神经元以前馈方式(向前传播)相互连接。一层中的每个神经元可以直接连接后续层的神经元。在许多应用中,这些网络的单元会采用S型函数或整流线性单元(整流线性激活)函数作为激活函数。


现在想想看要找出处理次数这个问题,给定的账户和家庭成员作为输入


要解决这个问题,首先,我们需要先创建一个前向传播神经网络。我们的输入层将是家庭成员和账户的数量,隐含层数为1, 输出层将是处理次数。

将图中输入层到输出层的给定权重作为输入:家庭成员数为2、账户数为3。


现在将通过以下步骤使用前向传播来计算隐含层(i,j)和输出层(k)的值。


步骤:

1, 乘法-添加方法。

2, 点积(输入*权重)。

3,一次一个数据点的前向传播。

4, 输出是该数据点的预测。


640?wx_fmt=png


i的值将从相连接的神经元所对应的输入值和权重中计算出来。

i = (2 * 1) + (3* 1)    → i = 5

同样地,j = (2 * -1) + (3 * 1)   → j =1

K = (5 * 2) + (1* -1)   → k = 9


640?wx_fmt=png


Python中的多层感知器问题的解决


640?wx_fmt=png


640?wx_fmt=png


激活函数的使用


为了使神经网络达到其最大预测能力,我们需要在隐含层应用一个激活函数,以捕捉非线性。我们通过将值代入方程式的方式来在输入层和输出层应用激活函数。


这里我们使用整流线性激活(ReLU):


640?wx_fmt=png


640?wx_fmt=png


640?wx_fmt=png


用Keras开发第一个神经网络


关于Keras:


Keras是一个高级神经网络的应用程序编程接口,由Python编写,能够搭建在TensorFlow,CNTK,或Theano上。


使用PIP在设备上安装Keras,并且运行下列指令。


640?wx_fmt=png


在keras执行深度学习程序的步骤

1,加载数据;

2,创建模型;

3,编译模型;

4,拟合模型;

5,评估模型;


开发Keras模型


全连接层用Dense表示。我们可以指定层中神经元的数量作为第一参数,指定初始化方法为第二参数,即初始化参数,并且用激活参数确定激活函数。既然模型已经创建,我们就可以编译它。我们在底层库(也称为后端)用高效数字库编译模型,底层库可以用Theano或TensorFlow。目前为止,我们已经完成了创建模型和编译模型,为进行有效计算做好了准备。现在可以在PIMA数据上运行模型了。我们可以在模型上调用拟合函数f(),以在数据上训练或拟合模型。


我们先从KERAS中的程序开始,


640?wx_fmt=png


640?wx_fmt=png


神经网络一直训练到150个时期,并返回精确值。


阿里云云栖社区组织翻译。

文章原标题《Deep Learning With Python》

作者:Vihar Kurama 

译者:荷叶。


640?wx_fmt=png


end

删库跑路加勒索,Redis勒索事件爆发

赠书啦!阿里巴巴技术工程师撰写书单汇总(一)!

10本免费的机器学习和数据科学书籍

世界杯千万级直播高稳定的挑战和实践

更多精彩

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

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

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

梯度下降算法的改进

  • 目标
    • 了解深度学习遇到的一些问题
    • 了解批梯度下降与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 阅读数 795
  • 机器学习&深度学习系统实战!

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

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

0. 写在前面

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

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

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

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

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

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

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

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

2.未来计划

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

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

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

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

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

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

3. 小结

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

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