PART 1 神经网络和深度学习

本笔记更像是一个大纲整理,着重建立知识框架,对于细节知识尤其是已熟知的点做简略或忽略处理

第一章 简介 [2019-10-04]

1.1 什么是神经网络

1.1.1 神经元

一个节点,该节点接收一些输入的数值,并进行计算(通常是加权求和+非线性变换),并把计算结果传递出来。

1.1.2 神经网络

一些神经元连接在一起,便构成神经网络。根据连接方式的不同(或者说数据流动方式的不同),可基本分为三大类:普通前馈神经网络(NN)、循环神经网络(RNN)、卷积神经网络(CNN)

1.2 神经网络与监督学习

前向传播(FP):神经网络接收一个输入(通常是一个向量或二维张量),经过若干个神经元层的计算与传递,最终输出。

反向传播(BP):前向传播的输出,与真实的y值的差异构成了损失函数。根据该误差,往回逐层调整神经网络的参数。其本质是链式求导。

FP+BP是神经网络训练的基本形式,属于典型的监督学习

1.3 深度学习兴起的原因

1)数据量的增大:数据量越大,模型效果越好,但对大部分传统ML算法(SVM等)而言,该趋势有上限,即当数据量大到一定程度后,训练效果将不再随着增大数据量而有明显提升。而神经网络则不然,由于神经网络结构可以非常复杂,其需要的数据量更大,且可以一直随着数据量增大而提升效果。

2)神经网络算法本身的演进:如ReLU激活函数的出现,其相比于sigmoid而言更快的收敛速度使得训练速度更快,从而更实际可用。

3)硬件的提升:主要包括算力和网络传输速度的提升等。

第二章 二分类简介

2.0 本章概述

以二分类问题和逻辑回归算法为例,介绍机器学习的基本流程和涉及的基本该念,主要包括:二分类问题、逻辑回归算法、损失函数、梯度下降等。

2.1 二分类问题简介 略

2.2 逻辑回归算法简介 略

2.3 逻辑回归的损失函数

使用交叉熵损失函数。

关于定义的区别:损失函数(loss function)指的是单个样本的损失。而代价函数或成本函数(cost function)一般指整个数据集的平均损失。

2.4 梯度下降法

基本原理和表达形式:略

基本特点:若代价函数为凸函数,则可寻得全局最优解,否则只能寻得局部最优解。

2.5 导数 略

2.6 更多导数的例子 略

对于大部分常见的函数形式,其导函数均可通过极限方法进行求解。

2.7 计算图

用计算图表达神经网络的FP和BP过程。

2.8 计算图的导数计算

同上,略

2.9 逻辑回归中的梯度下降法

可总结为以下步骤:

1)确定算法:逻辑回归

2)确定使用的损失函数:交叉熵

3)基于以上两步,损失函数就有了具体的形式。

4)梯度下降:针对每个特定样本,都可以求其损失对算法参数的导数。

2.10 整个数据集的梯度下降 略

2.11 向量化

含义:把整个过程包括前向传播、梯度求解、参数迭代等都用矩阵运算的方式去表达(或执行),而不是用for循环的方式。

实现:基于第三方库,如numpy等,其底层实现会充分利用CPU或GPU的并行化机制。(如何实现则不需要太关注)

2.12 更多向量化例子

2.13 逻辑回归的向量化表示

简单来说,一个样本就是一个vector,很多样本就是一个matrix,因为计算的形式可以表达为矩阵运算,而不是用for循环一个一个求,这就是向量化表示(基于numpy)

2.14 逻辑回归梯度下降的向量化表示

不止前向传播时可以向量化表示,反向传播时(求微分、求梯度)均可以用向量化表示。不再赘述。

(2019-10-08)

2.15 Python中的广播

广播是可以描述为:

① 一个(m, n)的矩阵,加减乘除一个数字,相当于把矩阵的每个元素都加减乘除这个数,或者说:是先把这个数字扩充成一个(m, n)的矩阵,然后再做一个pointwise的计算;

② 一个(m, n)的矩阵,加减乘除一个(m, 1)的向量,相当于把矩阵的每一行都加减乘除这个向量对应位置的元素,或者说,先把这个向量扩充成一个(m, n)的矩阵,然后做pointwise的计算;

② 一个(m, n)的矩阵,加减乘除一个(1 n)的向量,相当于把矩阵的每一列都加减乘除这个向量对应位置的元素,或者说,先把这个向量扩充成一个(m, n)的矩阵,然后做pointwise的计算;

以上所说的“扩充成一个矩阵”,就是“广播”的含义,“广播”在numpy里是默认实现的。

2.16 关于python/numpy的说明

略。numpy是数据分析/建模最常用的几个工具之一,应该进行系统学习。

2.17 jupyter/Ipython的基本使用

2.18 逻辑回归的损失函数的解释

逻辑回归:,其中y帽代表的是预测为1的概率

其中:

交叉熵损失函数:

(本篇后续专门整理一篇博客,待完成)

第三章 神经网络基础

3.1 神经网络概览

描述与符号,略...

3.2 神经网络表示

1. input layer、hidden layer、output layer。

2. 具体的符号表示:表示第一个隐藏层的第三个神经元~

3. 一般来说,隐藏层数+输出层数(1)等于通常说的神经网络层数。

3.3 计算神经网络的输出

输入 -> (加权求和 -> 激活)  ->  (加权求和 -> 激活) -> ... -> (加权求和 -> 激活) -> 输出

一个神经元内部有两步操作:加权求和、激活(非线性变换)

3.4 多样本的向量化

前向传播的矩阵运算形式表示,略

3.5 向量化实现的解释

W的每一行代表下一层的每个神经元对应的输入权重

X的每一列代表一个样本

3.6 激活函数()

1. sigmoid激活函数: 最经典的激活函数,但已经基本上不用了。

2. 双正切激活函数:

3. ReLU激活函数:

4. leaky ReLU:

经验法则:如果下一层是0-1二分类,则使用sigmoid,如果不是,则使用ReLU

3.7 为什么需要非线性激活

多个线性变化,本质山就是一个线性变换。

注意:ReLU并不是线性变换

3.8 激活函数的导数

1. sigmoid激活函数的导数:

2. tanh激活函数的导数:略

3. ReLU激活函数的导数:略

3.9 神经网络的梯度下降法

以一个只含有一个隐藏层的神经网络为例:

其包含的参数:

其中的损失函数:

前向传播过程:

反向传播过程:(梯度下降过程)

3.10 直观理解反向传播过程

本质就是链式求导。

可以直接看深度学习蓝皮书的反向传播四大公式。

3.11 网络参数的随机初始化

1. 不可全部初始化为零,因为参数全为0时,梯度下降法失效。

2. 随机初始化:

1) 对于sigmoid或tanh激活函数,w不宜初始化的过大,因为此时容易导致实际值落入梯度饱和区。对于ReLU类的激活函数则没有这类问题。

第四章 深层神经网络(DNN)

2019-10-11

4.1 深层神经网络

只针对简单的全连接神经网络而言,隐藏层较少就是浅层神经网络,隐藏层较多就是深层神经网络,多和少是个相对概念。

4.2 深层神经网络中的前向传播

加权求和 -> 激活函数 -> 加权求和 -> 激活函数 ... 还是这一套东西,略。

4.3 核对矩阵的维数

4.4 为什么使用深层神经网络

解释一:前面的层提取初级特征,后面的层在此基础上提取高级特征。以图像(人脸)识别为例:前面的层是提取折线、弯曲等初级特征,而后面的层在此基础上提取眼睛、鼻子等特征。

解释二:使用多个隐藏层,但每个隐藏层神经元数较少,即可拟合较复杂的函数。同等复杂的函数若用单隐藏层的神经网络进行拟合,隐藏层所需要的神经元数是巨大的,指数级(不懂)。

4.5 搭建深层神经网络块

本节实际讲了DNN中的前向传播和反向传播。再做如下阐述:

1)从数学角度看:前向传播就是加权求和+激活函数,循环往复。反向传播就是链式求导。

2) 从计算过程的优化角度看:前向传播并不是只算出输出,而是把中间层的输出也都缓存下来,反向传播时对各层的参数求偏导,也不是每层都从头开始求,而是缓存一些中间值,避免重复计算。(参考反向传播四大公式)

4.6 前向传播和反向传播

略…

4.7 参数 VS 超参数

对于DNN而言,参数就是W和b,通过学习而来。超参数可以分为两部分:一是结构参数,如网络层数,每层神经元数,每层用的激活函数等,二是训练参数:如学习率、迭代次数等。超参都是人为设定的。

4.8 神经网络和大脑的关系

算法所说的神经元与生物神经元类比,输入相当于树突,输出相当于轴突,核相当于激活函数。是个很粗糙的类比,其实没什么关系。

附录一 吴恩达采访Geoffrey Hinton

神仙聊天,什么都听不懂。捕捉到以下两点:

1. 被采访者是反向传播算法发明者

2. ReLU激活函数的本质是一叠sigmoid函数,唯一听说过的两个词语(但不懂这句话)

附录二 吴恩达采访Pieter Abbeel

附录三 吴恩达采访Ian Goodfellow

对抗神经网络的发明者

你可能感兴趣的:(PART 1 神经网络和深度学习)