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 改善深层神经网络 week1 深度学习的实用层面 听课笔记

    1. 应用机器学习是高度依赖迭代尝试的,不要指望一蹴而就,必须不断调参数看结果,根据结果再继续调参数. 2. 数据集分成训练集(training set).验证集(validation/develop ...

  2. deeplearning.ai 神经网络和深度学习 week2 神经网络基础

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

  3. deeplearning.ai 人工智能行业大师访谈 林元庆 听课笔记

    1. 读博士之前,林元庆是学光学,他自认为数学基础非常好.在宾夕法尼亚大学上课认识了他的博士导师Dan Lee,转学机器学习.他从头开始学了很多算法,甚至PCA,之前他完全不知道这些,他觉得非常兴奋, ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. MongoDB学习笔记(一)

    最近有些时间,就抽空研究了一下MongoDB,我以前经常使用关系型数据库,如Oracle.MySQL,对MongoDB只是有些很肤浅的了解,最近下决心要好好研究一下,主要的参考书有两本:<Mon ...

  2. CenOS 6.5下 mysql自动备份

      1.mysql备份命令是mysqldump,自动执行可以用cron,但是文件名需要带有时间标志,shell处理起来很麻烦,我就选择了python来解决 2.文件名用time模块来解决,执行系统命令 ...

  3. SQL 杂活

    例子一:查询两个表数据并且分页展示 select * from ( select ROW_NUMBER() OVER(order by CreateTime desc) as rownum,* fro ...

  4. JMeter循环控制器循环次数使用变量控制注意事项

    1.进入循环控制器之前变量要有值: 2.BeanShell处理文件,读取行数,赋值给变量,要有相应的Sampler,不然脚本不会运行. 对于单个线程来说,假如设置了循环2次,线程启动后,运行结束,此时 ...

  5. [LeetCode] 二叉树相关题目(不完全)

    最近在做LeetCode上面有关二叉树的题目,这篇博客仅用来记录这些题目的代码. 二叉树的题目,一般都是利用递归来解决的,因此这一类题目对理解递归很有帮助. 1.Symmetric Tree(http ...

  6. android中Log类的封装

    1.为了方便的使用Log打印日志,以及后续方便撤销日志打印,所以对Log类进行封装是一件好事. package market.phone; import android.util.Log; /** * ...

  7. JDK8中JVM对类的初始化探讨

    在<深入理解Java虚拟机>(第二版,周志明著)中,作者介绍了JVM必须初始化类(或接口)的五种情况,但是是针对JDK7而言的. 那么,在JDK8中,这几种情况有没有变化呢?(我猜测应该会 ...

  8. 用Go校验下载文件之SHA256

    用GO校验下载文件之SHA256 原来对计算机和网络使用安全这块不够重视,用了N多年盗版的操作系统和办公软件,为了破解使用过各种激活软件,也安装使用过很多别人破解过的软件:网络下载的文件从不校验.慢慢 ...

  9. [编织消息框架][JAVA核心技术]动态代理应用7-IRpcSend实现

    根据设计生成两个接口,IRpcSend send方法返回数据要求包装成QResult对象 public interface IRpcSend { public <T> QResult< ...

  10. Python核心编程--浅拷贝与深拷贝

    一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...