学习目标:

  • 吴恩达深度学习课程week2

学习内容:

  1. 梯度下降法(Gradient Descent)
  2. 计算图(Computation Graph)
  3. 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)
  4. 向量化(Vectorization)
  5. Python 中的广播(Broadcasting in Python)

学习时间:

  • 10.3-10.9

学习产出:

1. 梯度下降法(Gradient Descent)

作用:在你测试集上,通过最小化代价函数(成本函数)J(w,b)来训练的参数w和b。

训练w、b使得最终对于y^的预测更为精确。

形象化说明

在这个图中,横轴表示你的空间参数w和bb,在实践中,w可以是更高的维度,但是为了更好地绘图,我们定义w和b,都是单一实数,代价函数(成本函数)J(w,b)是在水平轴w和b上的曲面,因此曲面的高度就是J(w,b)在某一点的函数值。

目的:需要寻找一种方法找到J(w,b)的最小值,即最低点。理由:J(w,b)表示的是预测值与真实值之间相差的程度,所以越小就越真实。梯度下降法即为这样一种方法,可以找到J(w,b)的最低点。

大致过程(以一维函数J(w)为例进行介绍):假设函数J(w)如下图:

为了找到最低点,我们需要不断调整w的值:

其中dJ(w)/dw为函数对w的导数,容易理解,导数斜率的正负以及大小,明显的反映了在该点是在函数的递增还是递减区域,或者说,如果在只有某个极小值的情况下,寻找最低点,即为导数为0的点,我们要做的就是在w导数为正时减小w,导数为负时增大w,不断调整即可找到极值点。

:=表示更新参数,

a 表示学习率(learning rate),用来控制步长(step),即向下走一步的长度dJ(w)​ /dw就是函数J(w)对w 求导(derivative

吴老师的讲解视频中还有导数知识:这里不进行解释。

2.计算图(Computation Graph)

使用计算图模拟神经网络的大体思路:前向传播以及反向传播。

首先我们计算出一个新的网络的输出(前向过程),紧接着进行一个反向传输操作。后者我们用来计算出对应的梯度或导数。计算图解释了为什么我们用这种方式组织这些计算过程。

通过一个计算图的实例来模拟神经网络的大体过程:

1、计算过程

如上图中,定义函数J = 3(a+bc) 。通过u = bc、v = a+u的换元,我们可以大致画出一个计算图。前向传播即指我们从a、b、c计算得到J值的过程,例如图中输入5、3、2 ,得到J = 33即为前向传播过程。当然这里的过程指a、b、c经过计算得到u、v后逐渐获得中间值,到最终得到J值的过程,毕竟我们指的是神经网络不是数学计算。中间的过程才是我们想突出的重点。

2、反向求导过程

反向求导,旨在求出各个变量对J函数的求导。熟悉链式法则的同学计算起来很简单。

例如求dJ/dv = 3

通过链式法则,容易求出其他变量的导数,这里不再举例。

那么反向传播其实意义就在这里,先求dJ/dv,之后就可以求出dJ/da,如下图的两条红箭头,通过J的反向传播可以影响到a。或者说dJ/da指的就是:如果我们提高a的数值,对J的数值有什么影响?

通过不断反向求出各个变量的导数即为反向传播。

总结:正向计算:从左到右的计算来计算成本函数J。反向传播:从右到左计算导数。

3、逻辑回归中的梯度下降(Logistic Regression Gradient Descent)

梯度下降法、计算图。我们就可以使用计算图对梯度下降算法进行计算。从而解决逻辑回归的某些问题。

正向计算:这个过程根据给出的计算图公式很容易计算。

下面求出的各种导数,使用d+某个字母表示原函数对该字母的相应导数,例如da表示函数L(a,y)对a的偏导数。因为在python中使用da表示简便且易懂。

反向传播:求da:dL(a,y)/da​=−y/a+(1−y)/(1−a)

求dz:

具体过程感兴趣可以自己推导。依次可以求出dw1、dw2等

并且可以通过w1:= w1 - a*dw1、w2:= w2 - a*dw2、b:= b - a*db

对参数进行训练,从而得到我们想要的计算模型。

以上是对一个样本的导数计算以及根据训练样本调整参数的过程,如果有m个样本,我们就需要稍微的调整代价函数即可。在开始我们的代价函数代表一个样本与预测函数的相差量,那么m个样本只需要保证各个样本的代价函数之和是最小的即可,即全局的最小值。

新代价函数:(i)表示第i个样本。这里的1/m意义在于m样本代价函数求平均值,但是即使是总代价函数与平均值的极值点是一样的。

同时对于梯度下降不难发现,想要反向传播计算各个导数值,在计算过一个样本的导数值之后可以推理出,只需要对每个样本的导数进行相加即可。

代码流程:

J=0;dw1=0;dw2=0;db=0;
for i = 1 to mz(i) = wx(i)+b;a(i) = sigmoid(z(i));J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));dz(i) = a(i)-y(i);dw1 += x1(i)dz(i);dw2 += x2(i)dz(i);db += dz(i);
J/= m;
dw1/= m;
dw2/= m;
db/= m;
w=w-alpha*dw
b=b-alpha*db

这种计算中有两个缺点,也就是说应用此方法在逻辑回归上你需要编写两个小for循环。第一个for循环是一个小循环遍历m个训练样本,第二个for循环是一个遍历所有特征的for循环。这个例子中我们只有2个特征,所以n等于2。 但如果你有更多特征,你开始编写你的因此dw1​,dw2​,你有相似的计算从dw3​一直下去到dwn​。所以看来你需要一个for循环遍历所有n个特征。

其实还有第三个循环,即不断学习的循环,例如规定学习1000次,这种循环一般是不能优化的。

我们说明的两个小循环在计算上有很大的相似性,因此可以考虑放在矩阵中进行运算。下节我们 将考虑向量化:一种减少代码中的显式for循环的操作,可以使得代码的运算效率提升,这在机器学习领域是非常重要的。

4.向量化(Vectorization)

向量化是非常基础的去除代码中for循环的艺术。

在逻辑回归中你需要去计算z=wTx+b,w、x都是列向量。

计算z的一般方法:

z=0
for i in range(n_x):z += w[i]*x[i]
z += b

这样的遍历对于特征量很大(n_x)时非常耗时。

使用向量化:

z=np.dot(w,x)+b

这是向量化计算wTx的方法,你将会发现这个非常快。

观察两个简单的长度一百万向量分别用以上两种方法的运行情况:

import numpy as np #导入numpy库
import time #导入时间库
a = np.random.rand(1000000)
b = np.random.rand(1000000) #通过round随机得到两个一百万维度的数组
tic = time.time() #现在测量一下当前时间#向量化的版本
c = np.dot(a,b)
toc = time.time()
print(c)
print("向量化:" + str(1000*(toc-tic)) +"ms") #打印一下向量化的版本的时间#非向量化的版本
c = 0
tic = time.time()
for i in range(1000000):c += a[i]*b[i]
toc = time.time()
print(c)
print("For循环:" + str(1000*(toc-tic)) + "ms")#打印for循环的版本的时间

结果:

可以发现计算相同的c用的时间相差三百多倍。

将向量化应用于逻辑回归问题:

正向计算:

Z = np.dot(w.T,X) + b

反向传播:

5.Python 中的广播(Broadcasting in Python)

计算各种物质百分比。

import numpy as np #导入numpy库
A = np.array([[56.0,0.0,4.4,68.0],[1.2,104.0,52.0,8.0],[1.8,135.0,99.0,0.9]])
print("数据输入:\n",A)
cal = A.sum(axis = 0)
print("列和计算:\n",cal)
percentage = 100*A/cal.reshape(1,4)#reshape可以去掉,但是为了保证两个数组的维度相同并且计算不
#出错,选自reshape形成合适的矩阵
print("百分比:\n",percentage)

cal矩阵自动进行广播,形成3*4的矩阵。

总结:

【学习周报】深度学习笔记第二周相关推荐

  1. [深度学习]吴恩达笔记——第二周

    一.神经网络表示 1. w [ 1 ] w^{[1]} w[1]是(4,3)的原因:第一层 a [ 1 ] a^{[1]} a[1]有4个节点,输入有3个特征 2. w [ 2 ] w^{[2]} w ...

  2. 第1周学习:深度学习和pytorch基础

    第1周学习:深度学习和pytorch基础 一.概念学习 1.1关于一些基本问题的思考 1.2深度学习基础 二.代码练习 pytorch 基础练习 螺旋数据分类问题 一.概念学习 1.1关于一些基本问题 ...

  3. 重学《动手学深度学习》 —— 深度学习简介(第一章)笔记

    深度学习简介 本章地址:https://tangshusen.me/Dive-into-DL-PyTorch/#/chapter01_DL-intro/deep-learning-intro 仅作为私 ...

  4. 学习:深度学习公开课

    [转] http://www.leiphone.com/news/201701/0milWCyQO4ZbBvuW.html 导语:入门机器学习不知道从哪着手?看这篇就够了. 在当下的机器学习热潮,人才 ...

  5. 【深度学习】深度学习和经典统计学是一回事?

    器之心编译 编辑:rome rome 深度学习和简单的统计学是一回事吗?很多人可能都有这个疑问,毕竟二者连术语都有很多相似的地方.在这篇文章中,理论计算机科学家.哈佛大学知名教授 Boaz Barak ...

  6. 深度学习和深度学习框架CNTK入门(一)

    深度学习和深度学习框架CNTK入门(一) 深度学习介绍 是基于机器学习延伸出来的一个新的领域,由以人大脑结构为启发的神经网络算法为起源加之模型结构深度的增加发展,并伴随大数据和计算能力的提高而产生的一 ...

  7. 干货丨 简述迁移学习在深度学习中的应用

    文章来源:机器之心 迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中. 深度学习中在计算机视觉任务和自然语言处理任务中将预训练的模型作为新模型 ...

  8. 【深度学习】深度学习概念的理解(一)

    [深度学习]深度学习的理解(一) 写在最前面的话:设置[深度学习]栏,主要是为了扫盲深度学习的各个知识点,希望通过这种方式来给自己的基础打扎实,从头开始学习!如果有写得不对的地方,请指正!!!谢谢 深 ...

  9. 深度学习介绍-深度学习是什么

    title: 深度学习介绍(深度学习是什么?) author: 戴挽舟(BbiHH) tags: AI大数据 categories: 深度学习专栏 date: 2019-10-17 20:59:00 ...

  10. 【深度学习】深度学习的归一化方法的演变(局部响应LRN,BN,LN, IN, GN, FRN, WN, BRN, CBN, CmBN)

    [深度学习]深度学习的归一化方法的演变(局部响应LRN,BN,LN, IN, GN, FRN, WN, BRN, CBN, CmBN) 文章目录 [深度学习]深度学习的归一化方法的演变(局部响应LRN ...

最新文章

  1. 句子中单词首字母大写转换
  2. qt 快速按行读取文件_这是知识点之Linux下分割文件并保留文件头
  3. window.open打开新窗口被浏览器拦截的处理方法
  4. SimpleAjax 开发包 v3.1 (简单的Ajax)
  5. 政企上云网络适配复杂,看华为云Stack有妙招
  6. 对话框响应WM_KEYDOWN消息
  7. F5和nginx配合转发前端请求
  8. winform程序的皮肤问题
  9. CentOS4.4下邮件服务器架设笔记之windows AD整合功能实现
  10. BZOJ4456 ZJOI2016旅行者(分治+最短路)
  11. KAIST 电子工程系半导体实验室ISSCC会议发表的文章(Deep-Learning Processor)
  12. YYF根据学生编号查询学生签到状态
  13. Spring系列技术实战(项目搭建、知识点总结)
  14. 中文论文网站、英文论文网站、专业领域论文网站(学术狗必备的21个论文网站)
  15. 笔记本电脑亮度不能调节的一种解决方案
  16. 《web全栈工程师》:中总结的20条军规和必读书单
  17. 直接激光雷达里程计:基于稠密点云的快速定位
  18. 21天打卡挑战 - 经典算法之折半查找
  19. 英语语法笔记——定语从句(四)
  20. bootload启动流程(三)--Eboot每个函数的详细说明

热门文章

  1. 网络爬虫-腾讯支付encrypt_msg参数逆向
  2. 求助:hmailserver+roundcube启用密码插件后,用户无法修改密码问题
  3. 物联网中使用了哪些技术?
  4. iPad /iPhone无法开机、白苹果怎么办?教你快速解决iPad /iPhone开不了机的难题
  5. 苹果xs还原卡在进度条怎么关机
  6. TDD-FDD语音分层
  7. 数学(零)零散知识点
  8. ArcGIS 实验理论基础十五 空间查询
  9. 虚拟服务器共享文件夹端口,如何查看共享文件夹端口
  10. cmake中的INTERFACE_INCLUDE_DIRECTORIES是干什么的