1. Logistic回归是用于二分分类的算法。

对于m个样本的训练集,我们可能会习惯于使用for循环一个个处理,但在机器学习中,是把每一个样本写成一个列向量x,然后把m个列向量拼成一个矩阵X。这个矩阵是nx*m大小,nx是每个样本的特征数量,m是样本个数,X.shape=(nx,m)。也可以把特征写成横向量然后竖着拼成m*n的矩阵,NG说前一种列向量的表示方便运算。输出Y是1*m的向量,Y.shape=(1,m)。

把样本表示成矩阵形式后,可以对它进行线性操作wTx+b,由于二分分类的标签为0或1,所以需要把线性变换的值变换到[0, 1]之间,即y_hat = σ(wTx+b),这里σ(z)=1/(1+e-z)就是sigmoid函数。

Loss (error) function描述了预测的输出y_hat和真实的标签y有多接近。误差平方是个很符合直觉的选择,但是不方便梯度下降法求解。在logistic回归中使用的loss funciton是L(y_hat, y) = -( ylog(y_hat) + (1-y)log(1-y_hat) ). 直观地说为什么这个loss function合理呢?如果y=1,L(y_hat ,y)=-ylog(y_hat),L越小越好,所以y_hat越大越好,又因为输出在[0, 1]区间,所以y_hat会趋向于1;如果y=0, L=-log(1-y_hat), y_hat会趋向于0。更深层次的说,这里的loss function描述的是概率的log,而如果每个样本都是独立同分布的,则整体的概率是每个样本概率的累乘,取log之后就是累加。

Loss function描述了单个样本的损失,Cost function描述了在整个样本空间的损失,J(w, b)是所有样本的loss function的平均值。这种方式构造的cost funciton是凸函数,使得优化问题是一个凸优化问题。

Logistic回归可以被看作是非常小的神经网络。

2. 神经网络的计算过程分为前向传播和反向传播,前向传播是计算神经网络的输出,反向传播是计算对应的梯度。

可以用计算图把复杂计算过程拆分成简单计算的堆叠。

在Logistic回归的例子中,算法使用了2个嵌套的for循环,外层for循环遍历所有的样本,内层for循环遍历单个样本内所有的特征。这样做的缺点是for循环效率低,特别是当数据量越来越大的情况下。所以就要使用向量化技术摆脱for循环。

3. 向量化。为计算 z=wTx+b,w和x都是n*1的向量,python中 z=np.dot(w,x)+b 会比for循环快很多(NG随便跑了个例子就相差300倍的耗时)。这是因为这种内置的dot运算更好地利用了并行化计算SIMD(Single Instruction Multiple Data)。相比于CPU,GPU更擅长SIMD。所以只要有可能,就避免使用for循环。

4. python中的broadcasting机制:做加减乘除等运算的时候,自动会把标量,或者小矩阵,扩展成和大矩阵一样的大小,然后元素对元素的运算。这个机制有好有坏,好处是方便,坏处是易错。

一些建议:

 1)不推荐使用 a = np.random.randn(5),得到的a是秩为1的数组,a.shape = (5, ),这种数组和行向量、列向量都不一样。

推荐使用 a = np.random.randn(5, 1),这是指明a为列向量,a.shape = (5, 1)。

2)如果不确定矩阵的形状,可以用 assert( a.shape == (5, 1) )。

3)为保险都可以使用 a = a.reshape(5, 1),reshape的计算很快,所以不用担心耗时。

deeplearning.ai 神经网络和深度学习 week2 神经网络基础的更多相关文章

  1. deeplearning.ai 神经网络和深度学习 week2 神经网络基础 听课笔记

    1. Logistic回归是用于二分分类的算法. 对于m个样本的训练集,我们可能会习惯于使用for循环一个个处理,但在机器学习中,是把每一个样本写成一个列向量x,然后把m个列向量拼成一个矩阵X.这个矩 ...

  2. Deeplearning.ai课程笔记-神经网络和深度学习

    神经网络和深度学习这一块内容与机器学习课程里Week4+5内容差不多. 这篇笔记记录了Week4+5中没有的内容. 参考笔记:深度学习笔记 神经网络和深度学习 结构化数据:如数据库里的数据 非结构化数 ...

  3. 针对深度学习(神经网络)的AI框架调研

    针对深度学习(神经网络)的AI框架调研 在我们的AI安全引擎中未来会使用深度学习(神经网络),后续将引入AI芯片,因此重点看了下业界AI芯片厂商和对应芯片的AI框架,包括Intel(MKL CPU). ...

  4. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  5. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  6. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验【中英】

    [吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第一周测验[中英] 第一周测验 - 深度学习简介 和“AI是新电力”相类似的说法是什么? [  ]AI为我们的家庭和办公室的个人设备供电 ...

  7. Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1

    3.Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.1 http://blog.csdn.net/sunbow0 ...

  8. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  9. Spark MLlib Deep Learning Convolution Neural Network (深度学习-卷积神经网络)3.2

    3.Spark MLlib Deep Learning Convolution Neural Network(深度学习-卷积神经网络)3.2 http://blog.csdn.net/sunbow0 ...

随机推荐

  1. JavaScript学习总结(五)

    之前的几讲中我们曾经说过,JavaScript中是没有类的概念的.但是我们讲过对象,那么这个对象是怎么来的呢? 只要有函数即可创建对象 自定义对象 自定义对象的方式: 1. 使用无参的函数创建对象 & ...

  2. 35. docker swarm dockerStack 部署 投票应用

    1. 编写 docker-compose.yml # docker-compose.yml version: "3" services: redis: image: redis:a ...

  3. vue中报错Props with type Object/Array must use a factory function to return the default value

    Invalid default value for prop "value": Props with type Object/Array must use a factory fu ...

  4. C#压缩解压zip 文件

    /// <summary> /// Zip 压缩文件 /// </summary> public class Zip { public Zip() { } #region 加压 ...

  5. 计蒜客 方程的解数(DFS)

    问题描述 输出格式 输出一行,输出一个整数,表示方程的整数解的个数. 样例输入 - 样例输出 #include <stdio.h> #include <string.h> #i ...

  6. BP算法推导python实现

    def sigmoid(inX):   return 1.0/(1+exp(-inX))   '''标准bp算法每次更新都只针对单个样例,参数更新得很频繁sdataSet 训练数据集labels 训练 ...

  7. python格式化输出的三种形式

    法一: list_a = [1, 2, 3] str_b = 'aaa' string = "There are two contents:%s, %s" % (list_a, s ...

  8. MySQL笔记(一)

    MySQL是目前最流行的关系型数据库管理系统之一,它是由MySQL AB公司开发.发布并支持.MySQL是一个跨平台的开源关系型数据库管理系统,被广泛地应用在internet上的中小型网站开发中.相比 ...

  9. Codeforces Round #563 (Div. 2) 划水记

    网太卡只好做划水选手,只做EF. E 很容易发现第一个数是2k或者是3*2k-1,因为消去因子次数要尽可能多,然后可以直接dp一发转移还剩几个2/3即可,写起来有些麻烦 #include<bit ...

  10. ES6之展开运算符

    本文介绍ES6新增的展开运算符(spread operator). 由上图可得,展开运算符负责拼装数组和对象,与之相反,解构赋值负责分解数组和对象. 由上图可得,展开运算符能和解构赋值一起发挥成更大的 ...