深度学习 day02 03神经网络基础

Posted 念~旭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习 day02 03神经网络基础相关的知识,希望对你有一定的参考价值。

01 二分分类

  • 逻辑回归是一个用于二分分类的算法
  • 计算机保存一张图片就需要保存三个独立矩阵,分别对应图片中的红、绿、蓝三个颜色通道,如果照片是64×64像素的就有三个64×64的矩阵。然后需要将这三个矩阵所有元素都存放在特征x向量中(x向量就是64×64×3=12288维)。

  • 输入X用矩阵表示:python中用来输出矩阵的维度代码是X.shape=(n,m),表示X是一个n×m的矩阵。

02 逻辑回归

  • 当你实现逻辑回归时,你要做的就是学习参数w和b。因为要求输出y帽是在0到1之间,所以我们将输入x的线性函数w^T+b带入到sigma函数中,得到sigma函数。当z很大时输出接近于1,当z很小时输出接近于0。

03 逻辑回归损失函数

  • 损失函数又叫误差函数可以用来衡量算法在单个训练样本运行情况,在这里我们不用第一个式子,我们用第二个损失函数,因为在逻辑回归中如果使用第一个式子,最终会得到很多个局部最优解,梯度下降法可能找不到局部最优值(非凸),而使用第二个就会给我们一个凸的优化问题。

  • 成本函数基于参数的总成本,衡量的是w和b在全体训练样本上的表现

04 梯度下降法

  • 我们想要找到参数w和b来使成本函数最小,我们可以随机初始化参数,梯度下降法就是从初始点开始沿着最陡的下坡方向走一步,不断地进行迭代最终达到全局最小点。

  • 下面是参数更新的过程,无论参数w在哪一边,他都会向成本函数最小值方向前进,并且可以看出随着w的的变化,函数的斜率也是不断地减小,随着斜率的减小,w变化幅度也就随之减小(也就是朝着成本函数最小值方向移动的越慢)。

05 计算图

  • 一个神经网络的计算都是按照前向或者反向传播过程来实现的,首先计算出神将网络的输出,紧接着进行一个反向传输操作(我们用来计算出对应的梯度或者导数)。
  • 从左到右的过程,可以计算出J的值。

06 计算图的导数计算

  • 当计算所有这些导数时,最有效率的办法就是从右到左计算,跟着红色的箭头走,我们第一次计算对v的导数在之后计算对a的导数就可以用到,同样的对u的导数的计算在之后计算b的导数时就可以用到。他这个计算导数是,计算哪个导数就对那个值进行一些增加,看看他对J是如何影响的,使用微积分的链式法则就可以算出其导数。

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

  • 该样本的偏导数流程图:

  • 单个样本实例的一次梯度更新步骤:想要计算损失函数L的导数,首先我们要向前一步先计算损失函数关于变量a的导数(da),再向后一步计算出损失函数关于z的导数(dz),最后就是计算出dw、db了,就可以进行更新参数更新了。(更新w/b为b减去学习率乘以dw/db)

08 m个样本的梯度下降

  • 全局成本函数是从1到m项损失函数和的平均==>根据这个我们可以推导出全局成本函数对w1的导数也同样是各项损失函数对w1导数的平均。所以真正需要做的就是计算这些导数并且求平均,这样会得到全局梯度值,能够直接将其应用到梯度下降算法中。

  • 首先让我们初始化,接着我们要使用for循环来遍历训练集,并计算相应的每个训练样本的导数,然后将他们加起来。(这里有两个循环:第一个是遍历训练集,第二个是遍历所有特征)

09 向量化

  • 向量化技术可以使代码摆脱这些显式的for循环,会帮助处理更大的数据集。
  • 可扩展深度学习实现是在GPU(图像处理单元)上做的,但是课程是在Jupyter Notebook做的,仅用CPU。CPU和GPU都有并行化的指令有时候也叫做SIMD指令(单指令流多数据流,这个意思是如果你使用了能去掉显式for循环的函数,这样python的numpy能充分利用并行化去更快的计算)
  • 下图是一个非向量化与向量化实现的对比:

  • 下面是通过python来实际进行操作,对比非向量化与向量化实现:

10 向量化更多的例子

  • 依旧是非向量化与向量化前后对比:往往python中一个内置函数就搞定

  • 式子进行去掉一个for循环的写法:

11 向量化逻辑回归

向量化是如何实现在逻辑回归的上面的。这样可以同时处理整个训练集来实现梯度下降法的一步迭代,不需要任何显示的for循环。


  • 不需要显式的for循环就可以从m个训练样本中一次性计算出z和a,这就是正向传播一步迭代的向量化实现(同时处理所有M个训练样本)。

12 向量化逻辑回归的梯度输出

用向量化同时计算m个训练数据的梯度


  • 不使用for循环来计算参数的更新

  • 用高度向量化实现一个逻辑回归

13 python中的广播

广播技术是一种能使python和Numpy部分代码更高效的技术


  • 用两行代码求出每个元素所占列的百分比:第一行代码求出列的总和,第二行代码求出百分比。其实reshape有些多余,因为已经知道了cal是一行四列的向量了,但是为了确保正确还是用了。

  • 在实现神经网络算法时主要用到的广播形式

14 关于python/numpy向量的说明

  • 当你实现神经网络的逻辑回归时就不要用这些秩为1的数组
  • 每次创建数组时,要将其定义为列向量或者行向量
  • 如果不确定一个向量的具体维度是多少,就用assert()进行声明,确保这是一个向量
  • 如果由于某种原因得到了一个秩为1的数组就用reshape转换成一个列向量和行向量行为的数组

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

  • 损失函数的表达式:

  • 总体成本函数表达式:

以上是关于深度学习 day02 03神经网络基础的主要内容,如果未能解决你的问题,请参考以下文章

深度学习与图神经网络核心技术实践应用高级研修班-Day1卷积神经网络和循环神经网络

深度学习与图神经网络核心技术实践应用高级研修班-Day1典型深度神经网络模型

深度学习与图神经网络核心技术实践应用高级研修班-Day1卷积神经网络(CNN详解)

深度学习与图神经网络核心技术实践应用高级研修班-Day3图神经网络(GNN)

深度学习与图神经网络核心技术实践应用高级研修班-Day2循环神经网络(RNN)

深度学习与图神经网络核心技术实践应用高级研修班-Day1受限波尔兹曼机和深度信念网络