吴恩达 《神经网络与深度学习》笔记(持续更新)

来源:互联网 发布:怎么给淘宝供货 编辑:程序博客网 时间:2024/06/14 04:02

第一周 深度学习概论

1.2 什么是神经网络?

The tern deep learning refers to training neural networks.
“深度学习”指的是训练神经网络
“修正线性单元”即ReLU
单神经元神经网络。

1.3 用神经网络进行监督学习

  • 几乎目前所有的神经网络的经济价值都在“监督学习”的环境下面。
    神经网络在预测广告方面做得非常好。
    过去几年里,计算机视觉,也有了很大的进展。这就要感谢深度学习。

  • 语音识别,机器翻译的进步也非常大。
    图像领域里面,我们经常应用的是卷积神经网络。通常缩写为CNN。

  • 音频是一维的时间序列,对于序列数据,你经常使用RNN。循环神经网络。
  • 雷达信息需要混合的神经网络结构,
    标砖神经网络 卷积神经网络 循环神经网络。

  • 结构化数据 和 非结构化数据

  • Audio Image 文本
  • 从历史角度来看,非结构化数据 让计算机理解起来更难。
    人类更擅长理解音频和图像,文字是一个更近代的发明。
    多亏了深度学习,和神经网络的发展,计算机现在能很好的解释非结构化数据
    音频 图片 和自然语言处理。
    神经网络彻底改变了监督学习,正在创造着巨大的经济价值。

  • 基本的神经网络背后的技术理念大部分都不是新概念,有些甚至有十几年历史了。
    为什么最近神经网络才成为你可以使用的强大工具?

1.4 为什么神经网络会兴起?

规模一直在推动深度学习的进步。说到”规模”不仅是神经网络的规模
我们需要一个有许多隐藏单元的神经网络。有许多的参数,有许多的链接。而且还有数据规模。
事实上,要在神经网络上获得更好的表现,在今天看来最好的手段,往往就是,
要么训练一个更大的神经网络。要么投入更多的数据。这只能在一定程度上起作用。

因为最终你耗尽了数据,或者网络规模太大,需要的训练时间太久。
但提升规模,已经让我们在深度学习的世界中取得了巨大的进展。

为什么神经网络这么流行?

在深度学习崛起的初期, 是数据和计算能力规模的进展。算法的创新。
- Data Computation Algotithms

深度学习在今后的很多年还会有很大的进步。

第二周 神经网络基础

2.1二分分类

本周我们将会学习神经网络编程的基础知识
(Basics of Neural Network Programming)。

  • 当你要构建一个神经网络,有些技巧是非常重要的。
    例如:当你需要遍历的时候。不需要使用for循环。

正向传播步骤 反向传播步骤
logistic回归是一个用于二分分类的算法。

计算机要保存一个图片,需要保存三个独立矩阵。分别对应红、绿、蓝三个颜色通道。

2.2logistic回归(Logistic Regression)

Parameters:

    w \epsilon R^{nx}       b   \epsilon  R     \hat{y}  = (w^Tx+b)

sigmoid函数。

sinmoid(z) = \frac{1}{1+e^{-z}}

2.3logistic回归损失函数

Loss(Error)function

cost function(成本函数)

看不懂

2.5 导数

shope(斜率)即导数

2.6 更多导数的例子

2.7 计算图(Computation Graph)

J(a,b,c)= 3(a+bc)u = bcv = a+uJ = 3v

2.9 Logistic中的梯度下降算法

z = w_1x_1+w_2x_2+b \hat{y}  = a = \sigma(z) L(a,y) = -(ylog(a)+(1-y)log(1-a))

变换参数w和b的值 来使得损失函数最小化。

2.10 m个样本的梯度下降

2.11 向量化

  • 向量化通常是消除你代码中显示for循环的艺术。
  • 在深度学习安全领域,深度学习中通常发现在训练大数据集时,深度学习算法才表现更优越,所以代码运算的快变得非常的重要。所以在深度学习领域,完成向量化变成了一个非常重要的技巧。
z  = (w^Tx+b)

w是列向量,x也是列向量。

   w \epsilon R^{nx}  ,x \epsilon R^{nx}   

python:

z = np.dot(w,x)+b
import numpy as npimport time  as timera = np.array([1,2,3,4])print(a)a  = np.random.rand(1000000)b  = np.random.rand(1000000)tic = timer.time()c = np.dot(a,b)toc = timer.time()  print(c)print("vectorized version"+ str(1000*(toc- tic))+"ms")c = 0tic = timer.time()for i in range(1000000):    c += a[i]*b[i]toc = timer.time()  print(c)print("for loop"+ str(1000*(toc- tic))+"ms")
  • GPU 更擅长单指令多数据流(SIMD)计算

2.12 向量化的更多例子

当你编写新的网络的时候,尽量避免for循环。

2.13 向量化logistic回归

2.15 python中的广播

  • (m,n)的矩阵 加减乘除(1,n)的矩阵
    (1,n) ——> (m,n)
  • (m,n)的矩阵 加减乘除 (m,1)的矩阵
    (m,1) ——> (m,n)
import numpy as npA = np.array([[56.0,0.0,4.4,68.0],            [1.2,104.0,52.0,0.0],            [1.0,135.0,99.0,0.9]])print(A)cal = A.sum(axis=0)print(cal)percentage = 100*A/cal.reshape(1,4)print(percentage)

第三周 浅层神经网络

3.7 为什么需要非线性激活函数?

为什么神经网络需要非线性激活函数?

阅读全文
0 0