Keras-2-深度学习基础

说明:

1. Keras学习记录的参考书是:《Python深度学习》;
2. 本篇记录的是第一部分(1-2章)的知识点汇总,详情见书;

1. 深度学习之前的机器学习:

1.1 概率建模:基于统计学原理构建的机器学习模型 (比如:朴素贝叶斯算法、logistic回归);
1.2 早期神经网络:比如 LeNet (将神经网络的早期思想与反向传播算法相结合,应用于手写数字的分类问题);
1.3 核方法 (kernel method):它是一组分类算法,其中最有名的支持向量机 (SVM)。SVM的目标是通过在属于两个不同类别的两组数据点之间找到良好的决策边界 (可以看作是一条直线或一个平面,将训练数据划分为两块空间);核函数的作用就是在数据映射到高维空间后,计算高维空间中点对之间的距离 (将原始空间中的任意两点映射为这两点在高维空间中的距离)。核函数是一种计算距离的方法,是认为选择的;决策边界则是通过学习得到的。
1.4 决策树、随机森林、梯度提升机:随机森林是通过构建多个决策树,之后将这些决策树的输出整合到一起。**梯度提升机 (比如 XGBoost库)**也是将弱预测模型 (比如 决策树等) 进行整合的机器学习方法,它使用了梯度提升的方法,通过迭代训练新模型来专门解决之前模型的弱点。

2. 什么是深度学习:

  1. 机器学习是将输入映射到目标的过程,这个过程是通过观察许多输入和目标的示例实现的;
  2. 深度学习则通过一系列简单的数据变换 (层) 实现上述的输入到目标的映射 (深度学习神经网络的每一层对数输入数据的具体操作保存在该层的权重 weight中);
  3. 深度学习是机器学习的一个分支,用于从数据中学习表示,强调从连续的层 (layer) 中进行学习;
  4. 深度指的是模型中所包含的层,学习的意思指的是为神经网络的所有层找到一组权重值,使网络能够将每个输入与目标正确地对应;
  5. 可以将深度学习网络看成多级的信息蒸馏操作,信息通过连续的过滤器进行过滤,使得信息“纯度”越来越高,更有助于最终的任务;
  6. 损失函数 loss function(也称 目标函数 objective function) 通过神经网络的预测值与真实目标值之间的距离来衡量该模型在该示例上的效果好坏;
  7. 深度学习就是利用损失函数得到的距离值作为反馈信号对权重值进行微调,从而降低当前示例对应的损失值。这个过程由优化器 (optimizer)完成,它实现了反向传播算法 (backpropagation)

3. 深度学习与机器学习的区别:

深度学习将机器学习中的特征工程步骤实现了自动化,就是说深度学习可以一次性学习所有特征,不需要手动设计;
深度学习从数据中进行学习时有两个基本特征:1. 通过渐进的、逐层的方式形成越来越复杂的表示;2. 对中间这些渐进的表示共同进行学习,每一层的变化都要同时考虑到上下两层的需要;

4. 深度学习的数学基础:

4.1 基本概念:

1. 张量 (tensor):

张量是一个存储数值数据的容器,是矩阵向任意维度的推广【张量的维度(dimension)通常称为轴(axis)】。

2. 标量 (scalar):

也称为 标量张量、零维张量、0D张量【在 Numpy 中可以用 ndim 属性查看 Numpy 张量的维数】。

import numpy as np

x1 = np.array(10)
print(x1.ndim)
## 0

3. 向量 (vector):

也称 一维张量(1D张量),只有一个 axis。

import numpy as np

x1 = np.array([1,2,3])
print(x1.ndim)
## 1

4. 矩阵 (matrix):

也称 二维张量(2D张量),有两个axis(通常称为 行 和 列)。

import numpy as np

x1 = np.array([[1,2,3],
               [4,5,6]])
print(x1.ndim)
## 2

5. 高维张量:

将多个2D张量组合成一个数组,即3D张量;同理,将多个3D张量组合成一个数组,即4D张量。
深度学习一般处理的是 0-4D 的张量,处理视频数据时可能会遇到 5D 张量。

import numpy as np

x1 = np.array([[[1,2,3],
               [4,5,6],
               [7,8,9]]])
print(x1.ndim)
## 3

6. 张量维数的确定:

轴的个数称为阶,比如 3D 张量有 3 个轴,所以也称为 3 阶张量。
张量的数据类型指的是张量中所存储的数据的类型,大部分是数值型(比如 float32、uint8、float64等)。

  1. 利用 Numpy 对象的 ndim属性:
import numpy as np

x1 = np.array([[[1,2,3],
               [4,5,6],
               [7,8,9]]])
print(x1.ndim)  ## 3
  1. 利用 shape 属性查看张量的形状,有几个数字就是几维:
import numpy as np

x1 = np.array([[[1,2,3],
               [4,5,6],
               [7,8,9]]])
print(x1.shape)  ## (1,3,3) 一共有三个维度
  1. 直接数构成张量的 [ 的数目:
import numpy as np

x1 = np.array([[[1,2,3],
               [4,5,6],
               [7,8,9]]])
print(x1) 

## 结果:
[[[1 2 3]
  [4 5 6]
  [7 8 9]]]
  
## 一共有 3 个 "[",所以x1的维数是三维

7. 数据批量 (batchsize):

通常而言,深度学习中所有数据的第0轴是样本轴,也称为批量轴
我的理解就是第0轴是样本的数目。
通常深度学习模型不会一次性处理整个数据集,而是将数据拆分成小批量(就是按照样本轴将数据集划分为多份)。

8. 广播 (broadcast):

当两个不同形状的张量(比如一个2D张量和一个向量)相加时,较小的那个张量会被广播,从而使二者形状一致。
具体过程分为两步:
1). 向较小的张量添加轴(广播轴),使其 ndim 与较大的张量相同;
2). 将较小的张量沿着新轴重复,使其形状与较大的张量相同;

9. 张量变形 (tensor reshaping):

改变张量的行和列,得到想要的形状。变形后的张量中元素的总个数和变形前的相同。

import numpy as np

x1 = np.array([[1,2,3],
               [4,5,6]])
print(x1)

x2 = x1.reshape(6,1)
print(x2)
x1 = 
[[1 2 3]
 [4 5 6]]

x2 = 
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]] 

10. 转置 (transposition):

将矩阵的行列进行互换。

import numpy as np

x1 = np.array([[1,2,3],
               [4,5,6]])
print(x1)

x2 = x1.T
print(x2)
x1 = 
[[1 2 3]
 [4 5 6]]

x2 = 
[[1 4]
 [2 5]
 [3 6]]
  1. 张量切片 (tensor slicing):

选择张量中特定元素的操作。

"""在所有图像的右下角选出 14像素 x 14像素 的区域"""
target_region = train_image[:, 14:, 14:]

11. 可微和梯度:

可微:可以被求导;
梯度:张量运算的导数,假设输入数据x和y不变,那么损失函数就可以看作是权重W与损失值之间的映射关系,那么梯度就是该损失函数在W0时的导数。

12. 基于梯度下降调节参数的过程可分为5步 (以mini-batch SGD为例):

1. 抽取训练样本 x 和对应的目标 y,组成数据批量;
2. 在 x 上训练网络 [一次前向传播 (forward pass)],得到预测的 y_pred;
3. 计算网络在这批数据上的损失,衡量 y_pred和 y之间的距离;
4. 计算损失相对于网络参数的梯度 [一次反向传播 (backward pass)];
5. 将参数沿梯度的反方向移动一点 (step),从而减少这批数据的损失;

13. 优化器:

SGD还存在多种变体,区别在于计算下一次权重更新时既考虑当前梯度值,也考虑上一次权重更新,比如 带动量的SGD, Adagrad, RMSProp等。这些变体被称为优化器 (optomizer)。

14. 链式求导:反向传播算法

链式法则 (chain rule):(f(g(x)))' = f'(g(x)) * g'(x)

将链式法则用于计算神经网络的梯度值,得到的算法即反向传播 (backpropagation)。反向传播从嘴中损失值开始,从最顶层反向作用至最低层,利用链式法则计算每个参数对于损失值的贡献大小。

4.2 举例:

  1. 向量数据:2D张量,shape = (samples, features)
  2. 时间序列数据或序列数据:3D张量,shape = (samples, timesteps, features)
  3. 图像:4D张量,shape = (samples, height, width, channels) 或者 shape = (samples, channels, height, width)
  4. 视频:5D张量,shape = (samples, frames, height, width, channels) 或者 shape = (samples, frames, channels, height, width)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值