入门
基本概念:
深度学习(Deep Learning)入门——基本概念_樱花树上的alien的博客-CSDN博客_deep learning
开始跟着视频学习:(接着上个博客-机器学习-分类)
插一个偏导:
我们把变量y视为常数,通过对方程求导,我们发现ƒ在点(x, y, z)的。我们把它记为:
(1)
深度学习特指用深度神经网络处理机器学习问题的方法,即深度学习包含于机器学习。
深度学习是多层神经网络,具体多少层没有明确的规定
(2)深度学习3个步骤:
- 确定模型(Model)/函数集(Function Set),在深度学习中就是定义一个神经网络。
不同的连接会构成多样的网络结构。 - 确定如何评价函数的好坏
如果是多分类,那和Classification一章中一样,计算每个样本预测结果与Ground Truth的交叉熵,然后求和,即为Loss。 - 确定如何找到最好的函数
还是Gradient Descent。
神经网络模型对应的函数比较复杂,而反向传播算法(Backpropagation)是一个很有效的计算神经网络梯度的方法。
(3)确定模型(Model)/函数集(Function Set)
以这个全连接前馈网络找这个连接方法为例子:
x1'= w1x1+w2x2+b(w1=1,w2=-1,b=1)
x2'= w1x1+w2x2+b(w1=-2,w2=1,b=0)
weight和bias ,初始的w和b可以随机,然后训练会自动调节w和b的值。weight和bias是迭代计算出来的。
最开始w和b都不确定:
输入 向量 ;输出 向量
(4)
neuron 神经元(等于1 个的logistic regression)
神经网络基本组成:
输入层(input layer),隐藏层(hidden layer),输出层(output layer):
每层由神经元或单元组成
输入层由训练集的样本特征向量传入
隐藏层: 特征提取器(Feature Extractor),作用是代替特征工程(Feature Engineering)。
经过连接节点的权重(weight)传入下一层,上一层的输出是下一层的输入
上一层中的加权求和,然后根据非线性方程转化为下一层的输入
输出层:可以看成分类器
对于多层神经网络,理论上如果有足够多的隐藏层和足够多的训练样本,可以拟合出任意方程
(5)
如何用矩阵描述 运算:
对输入的x1=1,x2=-1: x1’=1*1+-1*-2+1=4
可以写成一连串的矩阵运算 (妙啊),让GPU去加速
特征提取 与特征工程 :机器学习之特征提取_Madazy的博客-CSDN博客_机器学习特征提取
识别狗和猫:
(特征工程)
如果是传统机器学习的方法,我们会首先定义一些特征,如有没有胡须,耳朵、鼻子、嘴巴的模样等等。总之,我们首先要确定相应的“面部特征”作为我们的机器学习的特征,以此来对我们的对象进行分类识别。
(特征提取)
而现在,深度学习的方法则更进一步。深度学习自动地找出这个分类问题所需要的重要特征!而传统机器学习则需要我们人工地给出特征!
(6)例子
,
输入向量 256维 (白色为0,橘色为1) ;输出10维度。
这个神经网络定义了一个 function集合,里面可能包含了一个好的functon
(7)有些问题 用机器学习好,有些问题用 深度学习好。深度学习是机器学习的一个分支,不是用来代替它的。目前设想
这里推荐一下:深度学习、机器学习与NLP的前世今生 - 知乎
而Deep learning颠覆了这个过程,不需要做特征工程。需要各种各样的特征,比如需要一些长时间依赖的特征,那可以用RNN、LSTM这些,让它有个序列的依赖;可以用局部的特征,用各种各样的N元语法模型,现在可以用CNN来提取局部的文本特征。
(8)确定如何评价函数的好坏:
损失函数Loss= 交叉镝
y和y"分别是: 真是值 和 预测值
确定如何找到最好的函数
还是利用梯度下降:
==================================================================================================================================================
p15
为什么是deep神经网络(瘦长,有多个隐藏层),而不是fat神经网络(扁平,只有一个隐藏层,但有许许多多神经元)?
”第一,本节课结论一:深度学习可以使用更少的数据产生同样的效果
=========================================================================
=========================================================================
backpropagation反向传播
精辟,BP只是让梯度算法更高效!反向传播就是 梯度下降的一个方法,让梯度下降更优效率。
network 网络
neuron 神经元
神经网络参数{w1,b1,w2,b2,.....} wi是一个神经元的参数向量
可能这个有上百万维度
1. 为什么 反向传播算法:
神经网络里面 参数太多,神经网络求损失函数对中间层参数的导数是一件十分困难的事情,但BP算法能很好的解决这个问题。
2.链式法则
链式法则是微积分中的求导法则,用于求一个复合函数的导数,是在微积分的求导运算中一种常用的方法。复合函数的导数将是构成复合这有限个函数在相应点的导数的乘积,就像锁链一样一环套一环,故称链式法则。
3.backpropagation反向传播算法法最重要的两个步骤分别是Forward pass和Backward pass
Loss损失函数=交叉镝 =
首先我们知道BP算法的目的是求损失函数Loss对权重/偏置参数的导数,即求:
C(θ) 是代价函数,它是 y 和 y^ 的距离度量,将所有的训练集的代价函数求和即为损失函数。
我们以对一个神经元求 ∂C/∂w 为例,根据链式求导法则: (z是中间变量)
激活函数包含在∂C/∂z中,这个S弯过来的点就是激活函数sigmoid(z)
在前馈时同时用变量存储了每层的梯度
所以我们目标即转化成了求 ∂z/∂w , ∂C/∂z 。
1.Forward pass就是用来计算 ∂z/∂w 的,而Backward pass是用来求 ∂C/∂z 的。
对于z = x1w1+x2w2+b
Forward pass: ∂z/∂w
2.Backward pass:∂C/∂z
这一项要从后往前算才行,所以叫反向传播
a=sigmoid(z)
现在问题是∂C/∂a:
其中:a又会影响到: Z‘ 和Z’‘
因为这个例子a只会影响到2个Z,所以∂C/∂a 拆分为2项
所以从 计算∂C/∂z,转变为 计算∂C/∂z’ 和∂C/∂z‘’
现在我们知道了输出层:y ,y是求C交叉镝的中间变量
从而:
这就是反向传播!!!!