2.2吴恩达深度学习笔记之优化算法
1.Mini_batch gradient descent 小批量梯度下降法
思想:batch gd是一次性处理所有数据,在数据集较大时比如500万个样本,一次迭代的时间会很长,而mini_batch gd是把数据集分为多个子数据集,每个eopch中对子集进行一次处理
实现:实现mini_batch分为两步,第一步shuffle,将原集打乱,乱序步骤确保将样本被随机分成不同的小批次。第二步partition分割,把训练集打乱之后,我们就可以对它进行切分了
shuffle 程序段:
permutation=list(np.random.permutation(m))
shuffled_X=X[:,permutation]
shuffled_Y=Y[:,permutation].reshape(1,m)
partition程序段:
num_complete_minibatches=math.floor(m/mini_batch_size)
for k in range(0,num_complete_minibatches):
mini_batch_X=shuffled_X[:,k*mini_batch_size:(k+1)*mini_batch_size]
mini_batch_Y=shuffled_Y[:,k*mini_batch_size:(k+1)*mini_batch_size]
mini_batch=(mini_batch_X,mini_batch_Y)
mini_batches.append(mini_batch)
if m%mini_batch_size!=0:
mini_batch_X=shuffled_X[:,num_complete_minibatches*mini_batch_size:m]
mini_batch_Y=shuffled_Y[:,num_complete_minibatches*mini_batch_size:m]
mini_batch=(mini_batch_X,mini_batch_Y)
mini_batches.append(mini_batch) #mini_batches是一个list,其中元素为tuple
经过打乱,分割得到的mini_batches是一个包含tuple的列表,迭代时可以通过以下代码访问:
for minibatch in mini_batches:
minibatch_X,minibatch_Y=minibatch
然后将minibatch_X,minibatch_Y看做X,Y进行前向传播,反向传播等处理。
2. Momentum 梯度下降算法
思想:计算梯度的指数加权平均,并利用该梯度更新权重,利用动量梯度下降算法可以减小纵向波动,加速收敛。
算法实现:
第一步,初始化V,即velocity:
def initialize_velocity(parameters):
L=len(parameters)//2
v={}
for l in range(L):
v['dW'+str(l+1)]=np.zeros((parameters['W'+str(l+1)].shape))
v['db'+str(l+1)]=np.zeros((parameters['b'+str(l+1)].shape))
return v
第二步,对更新参数函数,update_parameters()做一定修改:
def update_parameters_with_momentum(parameters,grads,v,beta,learning_rate):
L=len(parameters)//2
for l in range(L):
v['dW'+str(l+1)]=beta*v['dW'+str(l+1)]+(1-beta)*grads['dW'+str(l+1)]
parameters['W'+str(l+1)]=parameters['W'+str(l+1)]-learning_rate*v['dW'+str(l+1)]
v['db'+str(l+1)]=beta*v['db'+str(l+1)]+(1-beta)*grads['db'+str(l+1)]
parameters['b'+str(l+1)]=parameters['b'+str(l+1)]-learning_rate*v['db'+str(l+1)]
return parameters,v
3.adam优化算法:
是动量梯度算法的另一种优化
实现同样分两步,需要对V,S进行初始化并对更新参数函数加以修改
整个实现过程如下:
def initialize_adam(parameters):L = len(parameters) // 2v = {}s = {}
for l in range(L):v["dW" + str(l + 1)] = np.zeros_like(parameters["W" + str(l + 1)])v["db" + str(l + 1)] = np.zeros_like(parameters["b" + str(l + 1)])s["dW" + str(l + 1)] = np.zeros_like(parameters["W" + str(l + 1)])s["db" + str(l + 1)] = np.zeros_like(parameters["b" + str(l + 1)])return (v,s)
def update_parameters_with_adam(parameters,grads,v,s,t,learning_rate=0.01,beta1=0.9,beta2=0.999,epsilon=1e-8):L = len(parameters) // 2v_corrected = {} #偏差修正后的值s_corrected = {} #偏差修正后的值for l in range(L):#梯度的移动平均值,输入:"v , grads , beta1",输出:" v "v["dW" + str(l + 1)] = beta1 * v["dW" + str(l + 1)] + (1 - beta1) * grads["dW" + str(l + 1)]v["db" + str(l + 1)] = beta1 * v["db" + str(l + 1)] + (1 - beta1) * grads["db" + str(l + 1)]#计算第一阶段的偏差修正后的估计值,输入"v , beta1 , t" , 输出:"v_corrected"v_corrected["dW" + str(l + 1)] = v["dW" + str(l + 1)] / (1 - np.power(beta1,t))v_corrected["db" + str(l + 1)] = v["db" + str(l + 1)] / (1 - np.power(beta1,t))#计算平方梯度的移动平均值,输入:"s, grads , beta2",输出:"s"s["dW" + str(l + 1)] = beta2 * s["dW" + str(l + 1)] + (1 - beta2) * np.square(grads["dW" + str(l + 1)])s["db" + str(l + 1)] = beta2 * s["db" + str(l + 1)] + (1 - beta2) * np.square(grads["db" + str(l + 1)])#计算第二阶段的偏差修正后的估计值,输入:"s , beta2 , t",输出:"s_corrected"s_corrected["dW" + str(l + 1)] = s["dW" + str(l + 1)] / (1 - np.power(beta2,t))s_corrected["db" + str(l + 1)] = s["db" + str(l + 1)] / (1 - np.power(beta2,t))#更新参数,输入: "parameters, learning_rate, v_corrected, s_corrected, epsilon". 输出: "parameters".parameters["W" + str(l + 1)] = parameters["W" + str(l + 1)] - learning_rate * (v_corrected["dW" + str(l + 1)] / np.sqrt(s_corrected["dW" + str(l + 1)] + epsilon))parameters["b" + str(l + 1)] = parameters["b" + str(l + 1)] - learning_rate * (v_corrected["db" + str(l + 1)] / np.sqrt(s_corrected["db" + str(l + 1)] + epsilon))return (parameters,v,s)
2.2吴恩达深度学习笔记之优化算法相关推荐
- 吴恩达深度学习笔记(四)
吴恩达深度学习笔记(四) 卷积神经网络CNN-第二版 卷积神经网络 深度卷积网络:实例探究 目标检测 特殊应用:人脸识别和神经风格转换 卷积神经网络编程作业 卷积神经网络CNN-第二版 卷积神经网络 ...
- 799页!吴恩达深度学习笔记.PDF
吴恩达深度学习课程,是公认的最优秀的深度学习课程之一,目前没有教材,只有视频,本文提供完整笔记下载,这本笔记非常适合和深度学习入门. 0.导语 黄海广博士和同学将吴恩达老师深度学习视频课程做了完整的笔 ...
- 吴恩达深度学习笔记——卷积神经网络(Convolutional Neural Networks)
深度学习笔记导航 前言 传送门 卷积神经网络(Convolutional Neural Networks) 卷积神经网络基础(Foundations of Convolutional Neural N ...
- 吴恩达深度学习笔记——神经网络与深度学习(Neural Networks and Deep Learning)
文章目录 前言 传送门 神经网络与深度学习(Neural Networks and Deep Learning) 绪论 梯度下降法与二分逻辑回归(Gradient Descend and Logist ...
- 吴恩达深度学习笔记——结构化机器学习项目(Structuring Machine Learning Projects)
深度学习笔记导航 前言 传送门 结构化机器学习项目(Machine Learning Strategy) 机器学习策略概述 正交化(orthogonalization) 评价指标 数字评估指标的单一性 ...
- 吴恩达深度学习笔记1-Course1-Week1【深度学习概论】
2018.5.7 吴恩达深度学习视频教程网址 网易云课堂:https://mooc.study.163.com/smartSpec/detail/1001319001.htm Coursera:htt ...
- 吴恩达深度学习笔记(四)—— 正则化
有关正则化的详细内容: 吴恩达机器学习笔记(三) -- Regularization正则化 <机器学习实战>学习笔记第五章 -- Logistic回归 主要内容: 一.无正则化 二.L2正 ...
- 吴恩达深度学习笔记_Github标星过万的吴恩达机器学习、深度学习课程笔记,《统计学习方法》代码实现,可以在线阅读了!...
吴恩达机器学习.深度学习,李航老师<统计学习方法>,可以说是机器学习入门的宝典.本文推荐一个网站"机器学习初学者",把以上资源的笔记.代码实现做成了网页版,可以在线阅读 ...
- 吴恩达--深度学习笔记
这是一个督促自己学习的笔记 文章目录 这是一个督促自己学习的笔记 1.logistic回归 1. 神经网络基础----二分分类 2. logistic回归 3. logistic回归损失函数 4. 梯 ...
最新文章
- Chmod 777到一个文件夹和所有内容[重复]
- eclipse 常见问题及解决
- Linux进程之间通信 消息队列
- 城市流动劳动力的数学模型matlab,数学建模_人口预测
- HTTP/2特性及其在实际应用中的表现
- java 新项目计划_项目计划 - KerryJava - 博客园
- 计算机组成原理课程(唐朔飞)最全笔记
- 数列科技开源全链路压测平台Takin-总结
- c语言题库及详解答案 免费下载,C语言题库(带详解答案).pdf
- 数据结构:算法的时间复杂度和空间复杂度
- 解决显卡驱动错误43
- InterSystems开发者竞赛:InterSystems IRIS Analytics
- 第 342 场力扣周赛
- Python input函数
- a烟台计算机哪个学校好,烟台多所学校有新消息,家长速看!
- 电大学位计算机考试题库,电大学位英语跟考试题库一模一样.doc
- iOS客户端图片智能裁剪
- python大数据入门书籍_初学大数据,一定要知道这些
- jsp导入MySQL包_jsp操作数据库需要导入的包
- java生成永远不重复的随机数_java生成不重复随机数的方法