您的位置:首页 > 理论基础 > 计算机网络

Deeplearning.ai学习笔记-神经网络和深度学习(一)

2018-02-12 10:53 876 查看
前言

深度学习基础
基础术语

深度学习的优势



Logistic回归函数
Logistic数学表达式

Logistic表示代码

损失函数Loss function

代价函数Cost function

梯度下降Gradient Descent

前向传播反向传播



用向量表示样本

向量化

广播broadcast

Numpy中乘法使用
对应元素相乘npmultiply 或

同线性代数中矩阵乘法的定义 npdot

Numpy中维度表示建议

前言

这次学习的主题是深度学习,学习的第一门课程就是吴恩达的Deeplearning.ai项目课程。此系列笔记也是根据该深度学习课程整理而成。

该系列笔记是该课程中重点知识的罗列和自己的一些理解,可供正在学习此课程的同学作为参考,也是方便自己日后复习使用。

学习本课程需要有一点python基础、懂得Numpy库的基础使用,有高中的数学基础、懂得一点点矩阵、向量知识大致就可以了。这些知识可以到吴恩达的机器学习课程学习。

关于本篇笔记:这篇笔记是深度学习课程中第一课《神经网络和深度学习》的第一篇笔记,主要是深度学习基础知识的梳理

深度学习基础

基础术语

Recurrent Neural Network(RNN):适用于序列方面

Convolution Neural Network(CNN):适用于图像处理

结构化数据:如数据库里的数据

非结构化数据:hard to understand:如图像、文本

深度学习的优势

算法、硬件计算能力的提高使神经网络运行速度变快

大数据(带labels的)使得神经网络精确度更高



在数据集不多的时候深度学习的优势并不是很明显,但是在大数据的情况下,辅助以好的算法和强计算能力,会使神经网络的运行速度和精确度大大提高。

Logistic回归函数

Logistic数学表达式

z=WTX+bz=WTX+b

σ(z)=11+e−zσ(z)=11+e−z

有几个特征就有几个X和W

当z趋向无穷大,值趋向1

当z趋向无穷小,值趋向0

Logistic表示代码



1.首先前向传播计算J(损失函数)

根据for下面前三步求得J

2.接着反向传播

根据dz,dw1,dw2…… ->先求和,再平均。计算出代价函数、偏导数

3.利用梯度下降求w1,w2……

损失函数Loss function

损失函数是针对于一个样本的训练结果考察,如果针对整个训练集的精确度考察,用代价函数Cost function

一般的损失函数是误差平方:

L=12(y′−y)2L=12(y′−y)2

但是如果是像Logistic Regression逻辑回归这样的算法,则用:



代价函数Cost function



代价函数是损失函数的平均,一般代价函数是一个凸函数,有最小值。

梯度下降Gradient Descent

梯度下降算法对代价函数使用,对每个参数单独进行梯度下降

偏导数:就是当这个函数中有不只一个参数时,分别对每个参数进行求导



w=w−αdww=w−αdw

\alpha是学习率,上面的dw正确的写法应该是偏导数,但是可以这么理解。

w的导数dw就是斜率,dw用反向传播的方法求出。

反复计算使得函数将到最低点。

前向传播、反向传播

前向传播(frontprop)可以计算出输出结果

反向传播(backprop)计算出相应的导数,运用微积分的链式法则

计算导数的方法:通过计算两个值的变化量的商(因变量随自变量变化而变化)

在代码中表示前面每个值的导数(都是相对于结果输出值<-因变量)的方式:

如下图:a的导数表示为da = dJ/da



用向量表示样本

m个样本(X,Y)组成训练集、测试集

m个X:(一个X里有n个特征)

X中一个样本里的特征纵向表示,不同的样本横向表示。如下图:



样本的结果值Y:



向量化

如果很大的数据之间计算,尽可能不要用for循环,用向量化最好

如:

目标:m与n中对应值分别相乘
for循环:
m = [1,2,3,4]
n = [5,6,7,8]
for i in range(4):
a = a + m[i]*n[i]

向量化:
import numpy as np
m = np.array([1,2,3,4])
n = np.array([5,6,7,8])
a = np.dot(m,n)


向量化可以大大节省时间

广播broadcast

两个多维度向量加减乘除时,只要两个向量columns或者ranks有一个相等,即行数相等或者列数相等则可以在相应的位置上进行运算。如果没有哪一个对应相等,则不可以运算。

注意:如果列数等于行数不可以进行运算!唯一的特例:(1,n)与(n,1)之间可以运算,结果为(n,n)维向量

Numpy中乘法使用

对应元素相乘:np.multiply(), 或 *

两个多维度向量相乘时,只要两个向量columns或者ranks有一个相等,即行数相等或者列数相等则可以在相应的位置上进行运算。如果没有哪一个对应相等,则不可以运算。

注意:如果列数等于行数不可以进行运算!唯一的特例:(1,n)与(n,1)之间可以运算,结果为(n,n)维向量

同线性代数中矩阵乘法的定义: np.dot()

PS:矩阵乘法不符合交换律,复合结合律

两个向量根据矩阵乘法法则计算:





Numpy中维度表示建议

1.不要使用rank 1array!

如下:
不要使用:
a = np.arange(100)
a = np.random.randn(5)

用(1,n)(n,1)等来代替
a = np.arange(100).reshape(1,100)
a = np.random.randn(1
9cba
,5)


2.经常使用np.reshape来使向量理想化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐