《深度学习入门 基于Python的理论与实现》的读书笔记

第一章 Python入门

要区分矩阵的乘法和矩阵的点积等。

 

第二章 感知机

感知机:接受多个输入信号,输出一个信号。

逻辑电路,单层的感知机可以表示与门,与非门,或门。两层的感知机可以表示异或门。

由于组合与非门可以表示计算机(专家已证实),那么感知机也可以表示计算机。

 

第三章 神经网络

感知机的坏消息是:设定权重的工作还是由人工进行的。

神经网络的出现就是为了解决感知机的坏消息。

激活函数:将输入信号的总和转换为输出信号。

激活函数有很多种,比如:阶跃函数、线性函数、非线性函数等,常用的有:sigmoid函数、ReLu函数、softmax函数。

激活函数是连接感知机和神经网络的桥梁。感知机和神经网络的主要区别就在于激活函数。感知机可以看做是激活函数为阶跃函数的一种简单的神经网络。

神经网络的激活函数必须使用非线性函数,因为使用线性函数的话,加深神经网络的层数就没有意义了。(P49)

输出层所用的激活函数:一般地,回归问题使用恒等函数,二分类问题使用sigmoid函数,多分类问题使用softmax函数。(P62)

softmax函数:

softmax函数的改进,上式中存在缺点:exp(x),当x很大时,其exp(x)值会非常大,在计算机运算中容易越界(溢出)。为了不越界,在运算时,对x加上(或者减去一个常数)不会改变运算结果。为了防止溢出,一般会减去输入值中的最大值(P66)

softmax函数的特征:

(1)输出是0.0到1.0的实数,softmax函数的输出值得总和是1。

 

求解机器学习问题的步骤,可以分为“学习”和“推理”两个阶段。在学习阶段进行模型的学习,在推理阶段,用学到的模型对未知的数据进行推理(分类)。

预处理:对输入数据进行某种既定的转换。预处理包括:正则化等。

批处理:由于神经网络运算是矩阵的运算,而矩阵的运算的性质,矩阵点积时形状的变化(20)x(20,10)=(10),将输入数据改为二维的,即:(100,20)x(20,10)= (100,10)。利用矩阵运算的这个性质,可以加速运算的速度。而且有些库也提供了高效处理大型数组运算的优化。(P77)

 

第4章 神经网络的学习

损失函数:其作用是以某个指标为线索寻找最优权重参数。是表示神经网络性能的“恶劣程度”的指标。常见的损失函数包括:均方误差,交叉熵误差。

交叉熵误差:在某些情况下,均方误差不能作为损失函数,见:https://zhuanlan.zhihu.com/p/35709485

mini-batch学习:当数据有几百万、几千万时,对所有的数据计算损失函数是不现实的,此时会选取一部分数据作为全部的“近视”。

为什么要有损失函数,为啥不直接使用识别精度作为指标呢?原因是:识别精度(成功个数/总样本数)是不连续的,是突然变化的,对微小的参数的变化基本上没有反应。当用识别精度作为指标时,参数的导数在绝大多数地方都会变成0。(P92)

梯度:由全部变量的偏导数汇总而成的向量。注意这是个向量。

梯度法:不断地沿梯度方向前进,逐渐减小函数值的过程。这里说的函数值是指任意函数的值。

梯度法的公式:x = x - \eta\frac{\mathrm{d} f}{\mathrm{d} x}, 其中\eta 表示学习率。

 

第5章 误差方向传播法

计算权重参数的梯度方法:

(1)使用数值微分计算了神经网络中的损失函数关于权重参数的梯度。这个方法的优点是,容易实现,缺点是计算比较耗时。

(2)误差反向传播法:能高效的计算权重参数的梯度。

激活函数的导函数:ReLU层,Sigmoid层。

梯度确认:在实际的项目,采用误差方向传播法计算梯度,但是如何确定计算出来的梯度是正确的,则采用数值微分法来判断。

 

第6章 与学习相关的技巧

参数的更新:随机梯度下降法(SGD),Momentum,AdaGrad,Adam。

权重的初始值:必须随机生成初始值。

梯度消失:

各层的激活值分布都要求有适当的广度。

Xavier初始值:前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小。

He初始值:当激活函数使用ReLU时,一般推荐使用ReLU专用的初始值。

总结:当激活函数使用ReLU时,权重初始值使用He初始值;当激活函数为SigMoid或者tanh等S型曲线函数时,初始值使用VaVier初始值。

Batch Normalization:调整各层的激活值分布使其拥有适当的广度,因此,要向神经网络中插入对数据分布进行正规化的层。

过拟合:发生过拟合主要原因为:参数多,数据少。

解决过拟合的方法:权值衰减,Dropout。

超参数:各层的神经元数量、batch大小、参数更新时的学习率或权值衰减。

验证数据:在调整参数时,必须使用超参数专用的确认数据。

训练数据用于参数(权值和偏置)的学习,验证数据集用于超参数的性能评估,为了确认模型的泛化能力,要在最后使用测试数据集。

 

第7章 卷积神经网络

全连接层的问题是,忽视了数据的形状。

卷积层,卷积运算,卷积核(滤波器),填充,步幅,卷积运算的批处理。

池化层:输入数据发生微小的偏差时,池化仍会返回相同的结果。池化对输入数据的微小偏差具有鲁棒性。

im2col函数,将输入数据展开以适合滤波器(权重)

col2im函数:是im2col的逆函数。

 

第8章 深度学习

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多层感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络的训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底层实现原理与方法。本课程将给学员分享深度学习Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值