coursera 吴恩达深度学习 Specialization 笔记(course 3 week 2)—— 机器学习策略(二)

错误分析

如果你想得到一个训练算法来做人类可以做的任务,但是训练的算法还没有达到人类的效果,你就需要手动地检查算法中的错误,来知道你下一步该做什么,这个过程叫做错误分析。

如何进行错误分析

假设训练一个分类猫的算法,准确率为 90%,错误率为 10%,我们对分错的样本进行检查,发现分错的样本中有一些把狗认成了猫,这时是否应该将重心转移到使分类器对狗的表现更好?

错误分析:

  • 拿到约 100 张分类错误的开发集图片并进行手动检测
    • 一般不需要检测上万张图片,几百张就足够了!
  • 输出错误的图片里多少张狗

假设只有 5 张,那么在错误图片中只有 5% 的狗,如果在狗的问题上花了大量的时间,那么就算是最好的情况,也最多只是把错误率从 10% 降到 9.5%,所以并不值得。但是假设 100 张错误图片里有 50 张狗的图片,那么可以确定很值得将时间花在狗身上,因为错误率最多可能从 10% 降到 5%.

阅读更多
coursera 吴恩达深度学习 Specialization 笔记(course 3 week 1)—— 机器学习策略(一)

现在来到 coursera 的 deeplearning.ai 课程的第三课,这门课程叫 Structuring Machine Learning Projects 结构化机器学习项目,将会学习到构建机器学习项目的一些策略和基本套路,防止南辕北辙。

正交化 (Orthogonalization)

何为正交化

如同老式电视机一样,一个旋钮控制一个确定的功能,如屏幕横向伸长或纵向伸长,而不会一个旋钮控制两个属性。

ML 的正交化

我们希望某个旋钮能单独让下面的某个步骤运行良好而不影响其他,这就叫正交化。

  • 首先训练集要拟合的很好
    • 否则减小偏差
  • 如果训练集运行良好,则希望开发集运行良好
    • 否则减小方差
  • 如果在训练集和开发集运行良好,则希望在测试集运行良好
    • 否则采用更大的开发集
  • 最后希望在真实世界表现良好
    • 否则调整开发集或者改变代价函数
阅读更多
coursera 吴恩达深度学习 Specialization 笔记(course 2 week 3)—— 调参方法、批量归一化和深度学习框架

本周主要学习超参数的系统调整,批量归一化和深度学习框架的相关知识。

超参数的调整

调参的优先级

  • 第一优先级:学习率 $\alpha$
  • 第二优先级:动量算法参数 $\beta$ (默认值0.9),最小批的个数 mini-batch size,每层的隐藏单元数 hidden units
  • 第三优先级:神经网络的层数 layers,学习率衰减 learning rate decay
  • 几乎不需要调优:Adam 算法中的 $\beta_1,\beta_2,\varepsilon$,几乎每次只用默认值 $0.9,0.999,10^{-8}$

调参的注意事项

  1. 随机取样

    当需要调整多个超参数时,尽量在网格中随机取样(下图右),而不是规则抽样(下图左)

阅读更多
coursera 吴恩达深度学习 Specialization 编程作业(course 2 week 2)

本次作业实现了几种梯度下降算法,比较了它们的不同。

 普通梯度下降 (BGD)

所谓普通梯度下降就是一次处理所有的 m 个样本,也叫批量梯度下降 (Batch Gradient Descent),公式为:

阅读更多
coursera 吴恩达深度学习 Specialization 笔记(course 2 week 2)—— 优化算法的改进

本周主要学习不同的参数优化方式,提高模型的训练速度。

小批量梯度下降算法 (mini-batch gradient descent)

算法介绍

向量化可以有效率地同时计算 m 个样本,但是当样本数为几百万时,速度依然会很慢,每一次迭代都必须先处理几百万的数据集才能往前一步,所以我们可以使用这个算法进行加速。

首先我们将训练集划分为一个一个微小的训练集,也就是小批量训练集 (mini-batch),比如每一个微小训练集只有 1000 个样本:

阅读更多
《Beck》观后感

  我终于找到我的本命番了,它的名字叫《Beck》,为啥我知道这是本命番呢,因为这是第一部我看到最后迟迟舍不得看完的番,一共26集,每天睡前看几集,看了有十几天,不敢一次看完,因为看完了我的梦就碎了,是的,这是一个追梦的故事,我相信任何热爱摇滚,热爱音乐,热爱吉他,渴望或者已经开始玩乐队的人,都会对这部番有着深深的感动和发自内心的共鸣。因为这部番,我拿起了好久没碰的木琴,并开始挑选我的第一把电吉他……

阅读更多
coursera 吴恩达深度学习 Specialization 编程作业(course 2 week 1)

初始化

这次编程作业对比了三种不同的初始化方法的不同,三种方法分别是“零初始化”、“随机初始化”、“He 初始化”。

这是所用的数据,我们要将红点和蓝点分类:

阅读更多
coursera 吴恩达深度学习 Specialization 笔记(course 2 week 1)—— 正则化等

deeplearning.ai 的第二个课程名为 改进深度神经网络:超参数调整,正则化和优化 (Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization) ,这门课程教你使深度学习表现更好的“魔法”,而不是把神经网络当作一个黑箱,你会理解什么使得神经网络表现更好,而且能更系统地得到好的结果,你还会学到一些 tensorflow 知识。通过三周的学习,你将能够:

  • 了解构建深度学习应用程序的行业最佳实践
  • 能够有效地使用常见的神经网络技巧,包括初始化,L2 正则化和丢失正则化,批量归一化,梯度检查
  • 能够实现和应用各种优化算法,例如小批量梯度下降,动量,PMSprop 和 Adam,并检查它们的收敛性
  • 了解如何设置训练/开发/测试集和分析偏差/方差
  • 能够在 TensorFlow 上实现神经网络
阅读更多
coursera 吴恩达深度学习 Specialization 编程作业(course 1 week 4)

第一部分:基本架构

这是深度学习专项课程第一课第四周的编程作业的第一部分,通过这一部分,可以学到:

  • 使用非线性单元比如 ReLU 来提高模型
  • 建立一个更深的神经网络(大于一个隐藏层)
  • 实现一个易用的神经网络类

包的引入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 包的引入
import numpy as np
import h5py
import matplotlib.pyplot as plt
from testCases_v4 import *
from dnn_utils_v2 import sigmoid, sigmoid_backward, relu, relu_backward

%matplotlib inline # %符号为ipython的魔法函数,与画图有关,在pycharm中会报错
plt.rcParams['figure.figsize'] = (5.0, 4.0) # set default size of plots
plt.rcParams['image.interpolation'] = 'nearest'
plt.rcParams['image.cmap'] = 'gray'

%load_ext autoreload
%autoreload 2
阅读更多
coursera 吴恩达深度学习 Specialization 笔记(course 1 week 4)—— 深度神经网络

本周主要介绍深度神经网络 (Deep Neural Networks)。

深度神经网络概况

什么是深度神经网络

所谓深浅取决于神经网络的层数,例如左上角的逻辑回归模型是一个“最浅的”神经网络,而右下角的神经网络具有五个隐藏层,可以算得上是深度神经网络。

阅读更多