吴恩达-神经网络和深度学习(第二周神经网络基础)

未经允许,不得擅自改动和转载

学习如何用神经网络的思维模式提出机器学习问题、如何使用向量化加速你的模型。

  • 先介绍一些名词

    • training set (训练集)
    • feature vector(特征向量)
    • classifier(分类器)
    • calculus(微积分)
    • 循环(loop)
    • 数据集(datasets)
    • vectorization (向量化)
    • matrix(矩阵)
    • vector(向量)
  • 本周用到的一些符号【Notation】

    • (x,y)表示一个单独的样本
    • x是xn维的特征向量
    • 标签y值为0/1
    • 训练集由m个训练样本构成
    • (x^(1), y^(1))表示样本一输入和输出,
    • {x^(1), y(1),…..x(n), y^(n).}整个训练集
    • 测试集的 样本数。训练集的样本数
    • 矩阵也可表示训练集输入x,输出标签y
    • 注意:训练样本作为行向量堆叠
    • 输出y是1xm矩阵

如下图:

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 Notation

二分分类【Binary Classification】

  • 神经网络的计算过程中,通常有一个正向过程【forward pass】(或者正向传播步骤),接着有一个反向过程【backward pass】(或者反向传播步骤)

  • logistic回归是一个用于二分分类的算法

  • 计算机保存图片,要保存三个独立矩阵(Red红 blue绿 Green蓝)
    如果有64X64的一张图片,则输入向量的维度n=64X64X3=12288

  • 在二分分类问题中,目标是训练出一个分类器,他以图片的特征向量x作为输入,,预测输出的结果y(只有两个值)

logistic回归

这是一个学习算法,用在监督学习中,
如下图:

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 logistic

logistic回归损失函数

损失函数【error function】在单个训练样本中定义的,他衡量了在单个训练样本上的表现
成本函数【cost function 】在全体训练集样本下的表现–>对损失函数求和
对以上函数要找到合适的参数w和b
成本函数用于衡量参数w和b的效果

如下图:

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

梯度下降法【Gradient Descent】

  • 训练或学习训练集上的参数w和b

    《吴恩达-神经网络和深度学习(第二周神经网络基础)》 梯度下降法
    《吴恩达-神经网络和深度学习(第二周神经网络基础)》 求最小值

导数

等于= be equal to

  • pluse
  • minus
    X times
    / divide

计算图

可以说,一个神经网络的计算都是按照前向或者反向传播过程来实现的,
首先计算出神经网络的输出
首先计算出神经网络的输出,紧接着一个反向传播操作,后者我们用来计算出对应的梯度或者导数,流程图解释了为什么这样实现
流程图,是用蓝色箭头画出来的的,从左到右的计算

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 流程图

计算图的导数计算

从右到左计算导数

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

logistic回归中的梯度下降法(用偏导数实现)

导数流程图来计算梯度用偏导数有点大材小用,但对理解比较好

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

m个样本的梯度下降

运用到整个样本集中

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 for循环

向量化

循环很低效率,用向量化来加速运算(np.function)
z=np.dot(w, x) + b

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

可能有人说:可扩展深度学习实现是在GPU(图像处理单元)上做的,而我们做的再jupyter notebook上(CPU)

但GPU和CPU都有并行化的指令,SIMD单指令流多数据流,这点对GPU和CPU上面是成立的,只是GPU更擅长SIMD运算

  • for循环能不用就不用,如果可以使用内置函数或者其他方法计算循环,会比for循环更快

    《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark
    《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

进一步向量化logistic回归

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

向量化logistic回归的梯度输出

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

这就得到高度向量化的,高效的logistic回归梯度下降法

python中的广播(使python和Numpy部分代码更高效)

广播(broadcasting)对列向量,行向量都有效
例子:

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark
《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

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

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

关于python/numpy向量的说明

千万不要用秩为1的数组
随意插入assert()声明,要仔细检查矩阵和数组的维度
不要害怕调用reshape,来确保你的矩阵和向量

《吴恩达-神经网络和深度学习(第二周神经网络基础)》 mark

可以排除,简化甚至消灭代码中各种奇怪的bug

学习链接
4. Logistic代码实战

    原文作者:阿小庆
    原文地址: https://www.jianshu.com/p/687253f73444
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞