《Python深度学习》第一部分 深度学习基础

第一章 什么是深度学习

人工智能
1 符号主义人工智能
2 专家系统
3 机器学习

  • 输入数据点
  • 预期输出的示例
  • 衡量算法好坏的方法
    衡量结果是一种反馈信号,用于调节算法的工作方式。这个调节步骤就是我们所说的学习(learning)。学习指的是寻找更好数据表示(representation)的自动搜索过程。

机器学习和深度学习的核心问题在于有意义地变换数据。在于学习输入数据的有用表示,这种表示可以让数据更接近预期输出。
机器学习:在预先定义好的可能性空间(假设空间)中,利用反馈信号的指引来寻找输入数据的有用表示。
深度学习是机器学习的一个分支领域。深度学习中的深度(depth)指的一系列连续的表示层(layer)。现代深度学习通常包含数十个或者数百个连续的层,其他机器学习方法的重点往往是仅仅学习一两层的数据表示。
深度学习:数据表示的多级方法。
深度学习将特征工程完全自动化。

机器学习简史

  • 概率建模(probabilistic modeling)
    朴素贝叶斯算法
    logistic 回归(logistic regression,简称 logreg)
  • 早期神经网络(neural network)
    反向传播(backpropagation)算法
    卷积神经网络(Convolutional Neural Networks, CNN)
  • 核方法(kernel method)
    支持向量机(Support Vector Machine,SVM)
  • 决策树、随机森林与梯度提升机
  • 深度神经网络
    长短期算法(Long Short-Term Memory,LSTM)
    深度卷积神经网络

处理结构化数据问题-梯度提升机[XGBoost库]
图像分类等感知问题-深度学习[Keras库]

第二章 神经网络的数学基础

张量(tensor)【Numpy数组(arrays)】

矩阵是二维张量,张量是矩阵向任意维度的推广。张量的维度(dimension)通常叫作轴(axis)。张量轴的个数叫作阶(rank)。

  1. 标量(0D 张量)
  2. 向量(1D 张量)
  3. 矩阵(2D 张量)
  4. 3D 张量与更高维张量

关键属性:

  • 阶ndim
  • 形状shape(一个整数元组)
  • 数据类型dtype

张量切片(tensor slicing)

现实世界中的数据张量
第一个轴(0轴):
样本轴(sample axis )或样本维度
批量轴(batch axis)或批量维度

  • 向量数据:2D张量,形状为 (samples, features) 。
  • 时间序列数据或序列数据:3D张量,形状为 (samples, timesteps, features) 。
  • 图像:4D张量,形状为 (samples, height,wdith, channels) 或 (samples, channels,height,wdith) 。
    颜色通道channels/color_depth:灰度图像1,彩色图像3[R,G,B]
  • 视频:5D张量,形状为 (samples, frames, height,wdith, channels) 或 (samples, frames, channels,height,wdith) 。

张量运算(tensor operation)

  • 逐元素(element-wise)运算
    relu运算:max(x, 0)
    加法运算

  • 广播(broadcast)
    两个形状不一样的张量相加,较小的张量会被广播:
    (1) 向较小的张量添加轴(广播轴),使其ndim与较大的张量相同
    (2) 将较小的张量沿着新轴重复,使其形状与较大的张量相同

  • 张量点积tensor product
    向量和向量 标量
    矩阵和向量 向量
    矩阵和矩阵 矩阵

  • 张量变形tensor reshaping
    改变张量的行和列,以得到想要的形状。
    转置transposition

向量运算的几何解释
几何操作:仿射变换、旋转、缩放
深度学习的几何解释
高维空间中非常复杂的几何变换


目的:优化权重或可训练参数。
编译compile
损失函数loss function 或 目标函数objective function
优化器optimizer 或 优化方法optimization method
指标metric
训练(训练循环)
随机初始化
1数据批量
2计算预期值[前向传播forward pass]
3计算损失
4更新权重


导数derivative-->梯度gradient
随机梯度下降
真SGD


小批量SGD[小批量随机梯度下降]
1数据批量
2计算预期值
3计算损失
4计算损失函数相对于权重的梯度[反向传播backward pass];
4将权重沿着梯度的反方向移动一点。


批量SGD
变体:带动量的SGD、Adagard、RMSProp
动量momentum解决了SGD的两个问题:收敛速度和局部极小点。
学习率learinnig rate

链式求导:反向传播算法
将链式法则chain rule应用到神经网络梯度值的计算,得到的算法叫作反向传播backpropagation(有时也叫反式微分reverse-mode differentiation)

权重张量是层的属性,里面保存了网络所学到的知识knowledge。
在所有训练数据上迭代一次叫作一个轮次epoch。

第三章 神经网络入门

三个问题:

  1. 二分类问题[将电影评论划分为正面或负面]
  2. 多分类问题[将新闻按主题分类(单标签、多分类)|(多标签、多分类)]
  3. 标量回归问题[根据房地产数据估算房屋的价格]

:深度学习的基础组件
有些层是无状态的,但大多数层是有状态的,即层的权重。

不同的张量格式与不同的数据处理类型需要用到不同的层:

  • 简单的向量数据保存在2D张量中,通常用密集连接层densely connected layer[ 也叫全连接层fully connected layer 或密集层dense layer,对应Keras 中的Dense类 ]来处理。
  • 序列数据保存在3D张量中,通常用循环层recurrent layer[ 比如Keras中的LSTM层 ]来处理。
  • 图像数据保存在4D张量中,通常用二维卷积层[ Keras 中的Conv2D ]来处理。

层兼容性layer compatibility:每一层只能接受特定形状的输入张量,并返回特定形状的输出张量。

模型:层构成的网络
深度学习模型是由层构成的有向无环图。
网络拓扑结构:

  • 双分支(two-branch)网络
  • 多头(multihead)网络
  • Inception 模块

损失函数优化器:配置学习过程的关键
损失函数(目标函数)——在训练过程中需要将其最小化。它能衡量当前任务是否已经成功完成。
[二分类问题:二元交叉熵(binary crossentropy)损失函数
多分类问题:分类交叉熵(categorical crossentropy)损失函数
回归问题:均方误差(mean-aquared error)损失函数
序列学习问题:联结主义时序分类(CTC,connectionist temporal classification)损失函数
... ...
]
优化器(优化方法)——决定如何基于损失函数对网络进行更新,它执行的是随机梯度下降SGD的某个变体。


Keras:高层次的构建模块,模型级(model-level)的库。
低层次的运算由张量库,keras的后端引擎(backend engine)完成。Keras没有选择单一的张量库并将Keras实现与这个库的绑定,而是以模块化的方式处理这个问题,目前Keras有三个后端实现:TensorFlow 后端、Theano 后端和微软认知工具包CNTK。
TensorFlow
CPU:低层次的张量运算库Eigen
GPU:高度优化的深度学习运算库,叫作 NVIDA CUDA神经网络网络库(cuDNN)


加载数据集

准备数据
数据向量化
1列表转换成张量[1.填充列表2.one-hot编码]
2输入数据的每个特征都有不同的取值范围[对每个特征做标准化]
标签向量化
1整数张量
2one-hot编码

构建网络

  • 模型
    激活函数[relu整流线性单元,hanh,sigmoid,softmax]
    隐藏单元hidden unit, 信息瓶颈
  • 损失函数和优化器
    优化器optinizer
    损失函数loss
    [binary_crossentropy,
    categorical_crossentropy(sparse_categorical_crossentropy),
    mse]
    指标metrics
    [accuracy,
    mae]

训练——验证你的方法

  1. 留出验证集[监控]
    训练模型
    绘制训练损失和验证损失
    绘制训练精度和验证精度
    从头开始重新训练一个模型
  2. [K折交叉验证:数据点很少]
    K折验证
    保存每折的验证结果
    计算所有轮次中的K折验证分数平均值
    绘制验证分数
    绘制验证分数(删除前几个数据点)
    训练最终模型

测试——使用训练好的网络在新数据上生成预测结果

第四章 机器学习基础

机器学习的四个分支

  1. 监督学习
    标注annotation
  2. 无监督学习
    降维dimensionallity reduction
    聚类clustering
  3. 自监督学习
  4. 强化学习
    智能体agent

评估机器学习模型

过拟合overfit
泛化generalize
训练集、验证集和测试集
在训练数据上训练模型,在验证数据上评估模型,在测试数据上测试模型。

权重:参数。[深度学习中,模型可学习的参数的个数通常称为模型的容量capacity]
模型的层数或每层大小:超参数。

信息泄露information leak:如果基于模型在验证集上的性能来调节模型配置,回很快导致模型在验证集上过拟合,即使你并没有在验证集上直接训练模型也会如此。

三种经典的评估方法:

  • 简单的留出验证hold-out validation
  • K折验证K-fold validation
  • 带有打乱数据的重复K折验证iterated K-fold vaildation with shuffling

评估模型的注意事项

  1. 数据代表性data represrntativeness[随机打乱]
  2. 时间箭头the arrow of time [时间泄露time leak]
  3. 数据冗余redundancy in your data

数据预处理、特征工程和特征学习

神经网络的数据预处理
数据预处理的目的是使原始数据更适于用神经网络处理,包括向量化、标准化、处理缺失值和特征提取。

  • 向量化
  • 值标准化[取值较小;同质性
    将每个特征分别标准化,使其平均值为 0;
    将每个特征分别标准化,使其标准差为 1]
  • 处理缺失值

特征工程feature engineering

过拟合与欠拟合

最优解决方法:获取更多的训练数据。
次优解决方法:正则化regularization

  • 减小网络大小
  • 添加权重正则化
    奥卡姆剃刀(Occam's razor)原理:如果一件事有两种解释,那么最可能正确的就是最简单的那个,即假设更少的那个。
    这里的简单模型simple model 是指参数值分布的熵更少的模型(或参数较少的模型)
    一种常见的降低过拟合的方法就是强制让模型权重只能取较小的值,实现方法是向网络损失函数中添加与较大权重值相关的成本cost[常见的成本:L1正则化;L2正则化]
  • 添加 dropout 正则化
    对某一层使用 dropout, 就是在训练过程中随机将该层的一些输出特征舍弃(设置为0)
    dropout 比率(dropout rate) 是设为0的特征所占的比例,通常在 0.2~0.5 范围内。

机器学习的通用工作流程

  1. 定义问题,收集数据集
    非平稳过程
  2. 选择衡量成功的指标
  3. 确定评估方法
  4. 准备数据
  5. 开发比基准更好的模型
    统计功效statistical power
    纯随机的基准dumb baseline
    三个关键参数:
  • 最后一层的激活
  • 损失函数
  • 优化配置
  1. 扩大模型规模:开发过拟合的模型
    (1)添加更多的层
    (2)让每一层变得更大
    (3)训练更多的轮次

  2. 模型正则化与调节超参数

  • 添加 dropout
  • 尝试不同的构架:增加或减少层数
  • 添加L1 和/或 L2 正则化
  • 尝试不同的超参数(比如每层的单元个数或优化器的学习率), 以找到最佳配置
  • (可选)反复做特征工程:添加新特征或删除没有信息量的特征

你可能感兴趣的:(《Python深度学习》第一部分 深度学习基础)