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

作者: 双愚 | 来源:发表于2017-09-07 02:07 被阅读110次

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

    • 先介绍一些名词

      • 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.haomeiwen.com/subject/yuhhjxtx.html