花书deep learning 笔记

2019.7.30

大学时候线代离散还可以,但这么多年过去了,线代忘得比较多,一开头三节课帮我捡了不少东西...简单写一些笔记吧:

  1. 矩阵对角化和矩阵的SVD奇异值分解是非常有效的压缩手段,本质把复杂的大型矩阵(或者是对称正定矩阵)用一些具有特殊性质的小矩阵的才用线性组成的方式来表示。对称矩阵一定可以对角化。

  2. 逆矩阵这块是对于方阵AB有AB=E则可以说AB可逆,BA= E且A逆等于B,B逆等于A。可逆充要条件是方阵的秩R(非0子式的最高阶数,rank这个词用“秩”来翻译真是太绝了)与方阵维数相同,或者时候一个矩阵的行列式大于0则一定可逆。课程中说了过拟合的情况和为什么加上正则化后就不会过拟合,其实还是在讨论样本数m和特征数n的关系。这节课在不可逆和可逆这块讨论颇多,这个在吴恩达机器学习的Normal Equation的那一节专门提到( noninvertibility ),不过现在Johnson直接把这个推导过程给写出来了,a就是吴恩达课上的theta。好处是不用去找learning rate,不用iterate, 但是复杂度是O(n^3), 要求X转置乘X的逆。如果特征值很大的话,还是用梯度下降吧!

  3. PCA这块主要降维度(课上是2维到1维,但是可以从n维到k维),找到一个合适的surface(假设有不同的projection lines)来minimise 点和投影点的 squared distance. 一开始要做的一些预处理,比如mean normalisation这块老师也提到了,样本点中心化,以保证点有zero mean(或者做feature scaling)。然后就是中间的推算。吴恩达那个课最后[u,s,v] = svd (sigma), sigma是xi乘xi转置之和除以m,u是n维的,如果需要降到k维度,那么就是取其中前面的k个向量就行了,得到u-reduce。这个矩阵转置后乘X就是投影的表达Z了。这个老师把恩达没讲的背后涉及的线代机理讲了,强..

2019.8.1

极大似然估计和高斯分布:

这块其实也是吴恩达课程中很重要的一部分, 但是这节课的亮点在于从最小二乘角度去理解求参的结果等价于从极大似然(概率)角度去求解参数的结果。
如果说似然函数L= p(x1;theta1)p(x2;theta2)...那么估计参数theta就是max(L), 因为观测到这些样本的可能性是最大的。然后为什么高斯分布的均值为样本均值呢?这里可以使用对数似然函数Ln(L),这样就可以极大化简里头密度函数的那一大堆,然后因为要使得L最大来估计参数所以对均值u求偏导。对方差σ求偏导也是同理。
那如果误差是服从高斯分布的话,我们就可以实现拟合误差了: 并得到其对数似然函数。化简后可得到这个: 所以要让L最大的等价命题就使得以下最小: 所以问题就巧妙地化解成一个无约束最优化的问题了: 对w求导之后得到: 于是这个又和normal equation 异曲同工之妙了:

无约束最优化和有约束最优化:

一开头就说了一个关键的话,什么是机器学习的本质?本质就是对求极值的方式进行优化。比如最小二乘就是通过求导等于0来求解参数, 无约束最常见的肯定就是gradient descent了。虽然johnson很巧妙地用柯西不等式求单位长度变化率来说明问题,我个人觉得吴恩达在解释“沿着gradient方向变化最快”以及"这样做为什么影响cost function J" 这几块的时候要更加清楚一些。说直白点每次iterate的时候就是在改变参数theta:

然后这个也可以很直观地说明为什么选取不好的alpha会导致无法converge的情况,也可以间接暗示我们为什么需要mini-batch或者batch gradient descent.
至于牛顿法思路,我觉得主要是要注意牛顿法是进在接近最佳点的时候才能用牛顿法的收敛(快),因为在接近最佳点的时候,比如用一个二次函数去代替原来的函数才成立。理解下原理就可以了。

对比无约束的最优化,有约束的最优化显然要更加凶险一点了,大思路是看约束为等式和约束为不等式的两个条件。 前者没有太多可说的,二维空间里是曲线相切等高线的那点才是把打开min f(x)大门的钥匙,拉格朗日函数是关键。 后者里面要明白这个约束不是一条曲线而是一个范围了,比如约束是
这个时候KKT条件就非常关键了,因为假如这个点在范围里,那么必定为0. 这个时候f(x)得到gradient 是0,那显然这个约束就么有起作用嘛!说白了,就看这个点在不在边界(切线)上。老师课上给的例子非常好,直接帮助消化理解:

有约束最优化问题

末了,Johnson居然旁征博引把SVM拿出来联系到这个有约束的最优化,真是不服不行..
顺便引用这篇牛文回答下作业题目中的问题:“一元线性回归的基本假设有哪些?”
回归分析的五个基本假设:

  1. There should be a linear and additive relationship between dependent (response) variable and independent (predictor) variable(s). A linear relationship suggests that a change in response Y due to one unit change in X¹ is constant, regardless of the value of X¹. An additive relationship suggests that the effect of X¹ on Y is independent of other variables.线性性 & 可加性(线性性:X1每变动一个单位,Y相应变动a1个单位,与X1的绝对数值大小无关。 可加性:X1对Y的影响是独立于其他自变量(如X2)的)。
  2. There should be no correlation between the residual (error) terms. Absence of this phenomenon is known as Autocorrelation.误差项(ε)之间应相互独立。
  3. The independent variables should not be correlated. Absence of this phenomenon is known as multicollinearity.自变量(X1,X2)之间应相互独立。
  4. The error terms must have constant variance. This phenomenon is known as homoskedasticity. The presence of non-constant variance is referred to heteroskedasticity. 误差项(ε)的方差应为常数。
  5. The error terms must be normally distributed.误差项(ε)应呈正态分布。

2019.8.5

overfitting, underfitting and training/cv/test set

首先注意就是回归和分类的区别就是输出。分类是一个输出概率分布的问题(比如使用softmax)但是回归是输出连续值。
关于J随着iteration增加在training set和cross validation set(也叫dev set)上的表现是不一样的,这就涉及到了overfitting 的问题。 通常来说我们会引入regularisation parameter λ来改变overfitting的问题,这其实很好理解,因为这个相当于就是penalise参数。 如果说λ太小,那就不起作用了(high variance)。 如果说λ太大,那么这个penalise程度过高,可能会造成underfitting (high bias). 只有不大不小的时候才能做好bias 和 variance之间的trade-off.

但问题是怎么才能知道我到底是high/low bias或者high/variance呢?答案在于你机器学习的一个总的strategy. 比如首先在于数据集的分隔架构,就是我们到底多少用于training, cross validation 或者test. 吴恩达的ML提出60/20/20比例是很常见的,这是因为我们可以不断用cross validation或者dev set去调整我们的参数。Johnson在课程中提到了每一个epoch就需要去看下cross validation set然后了解其performance提高程度,进而改善learning rate,以尽可能在最远离最优点的时候下降的快一点,在接近最优点时就采用baby step. cross validation的作用不仅仅是对learning rate调整或者帮助对终止条件的预设,而更重要的是帮助我们了解where we should target next. 比如你训练一个数据集中有大量来自互联网的高清图片,但是只有一少部分的用户自己拍摄的非高清图片,而你这个系统的目标就是为了识别用户拍摄的图片, 这个时候更推荐的做法就是让你的cv set和test set都是用户拍摄的图片,然后training set里是所有的互联网图片加一部分用户拍摄图片。这样做远比把互联网图片和用户图片randomisation之后用60/20/20比例分割。 值得注意的是,cv set和test set要是来自same distribution,但它们可以和training set的来自不同的distribution。吴恩达的课里面专门还提到了这种情况下可以引入一个叫做training-dev dataset的概念。 假如我们training error 是1%, training dev error 9%, cv error10%, 那我知道了这个是variance的问题。但是如果training error 是1%, training dev error 1.5%, cv error10% , 那问题可能就出现在data mismatch上面了。 除了60/20/20还有98/1/1这种比例,不过通常用于数据集非常大,然后target的情况比较有限的情况,anomaly detection之类的。
和strategy相关的就是对于hyperparameters的调整了。补充一些经验性的东西,比如首先考虑的learning rate. 然后其次考虑的是batch-size呀,momentum term β 之类的,比如hidden units或者layers数都可以最后考虑。关键的关键是恩达说的orthogonalisation,去逐步接近调参的真谛..几个很根本也很关键的问题:

  1. 拟合training set如何?比如:看看和human level performance的差距。如果这块表现很差,应该想想是不是可以用更大更深的network?Activation function的选取?
  2. 拟合dev set如何?比如:当是plot出来的decision boundary那个“强行拟合”的轮廓一出来你就应该有一些直觉可能overfit了,这个时候就要想是不是可以采取dropout, L2 reg等。
  3. 拟合 test set 如何?比如,往往test set和 dev set巨大差距就暗示着是不是对于dev set拟合得过好,是否需要更大的dev set。

ps.
作业中左上low variance, low bias, 右上high variance, low bias, 左下high bias, low variance, 右下high variance, high bias.
对于点估计没什么好说的,前几节就提过了无偏样本方差和有偏样本方差的区别,算是巩固了吧。

2019.8.8

贝叶斯估计

贝叶斯估计是最大后验估计的一个扩展,最大后验估计(maximum a posteriori, MAP)是把参数θ 当做一个随机变量,也就是θ是服从某个概率分布,这个分布就叫做先验分布。最大后验估计利用来自先验的信息,选择后验概率最大的点。公式为:

其中P(θ) 就是先验概率,它就是根据历史的经验得出来的一个概率分布,比如患病的概率P(患病),我们可以从历史数据里面看10000个人里面有多少是患病了的。 P(x|θ)比如说P(阳性|患病) ,就是诊断为患病的人里面有多少是检测出来了阳性。如果说你检测出来了阳性,又是多大的概率是真的患病了呢?套公式:P(患病|阳性) 也就是P(θ|x) ,就是P(阳性|患病)P(患病) / P(阳性)。
既然参数θ被当做一个随机变量要考虑先验分布(密度函数为P(θ)),P(x|θ) 可以用极大似然来理解。那么最好的θ 就是使得P(x|θ)P(θ) 取最大值的θ:

注意:这种贝叶斯派理解方式是和频率派(极大似然估计)是有差别的,因为极大似然估计是以为使似然函数最大的参数θ为最好的θ,而θ就是一个固定的值,只不过我们不知道罢了。
看到一个说 对数极大似然和贝叶斯估计区别的帖子:

对数极大似然:
Advantages

provides a consistent approach which can be developed for a large variety of estimation situations.
unbiased: if we take the average from a lot of random samples with replacement, theoretically, it will equal to the popular mean.
variance is really small: narrow down the confidence interval.

Disadvantages

Likelihood function has to be worked for a given distribution, in fact, the real-world problem is always non-trivial.
If the likelihood function is not simple, then the numerical estimation will be always trivial. Also, MLE is really sensitive to the choice of starting value, from the numerical analysis perspective(such as loss of significant digits).
MLE heavily biases to small samples.

贝叶斯估计:
Advantages

Good information will toward good estimation.
Work pretty well in big data.
variance is really small: narrow down the confidence interval.

Disadvantages

Wrong prior will toward the wrong estimation, and then totally wrong prediction.
Estimation comes from the different resources(dataset), may add noise to model.

2019.8.11

小结

为什么平方损失函数不适合分类问题:非线性激活函数的存在通常会使得用平方做的loss function是non-convex的,梯度下降很容易变成落到局部最佳而非全局最佳。但L(ŷ ,y) = -(y log ŷ + (1-y)log(1-ŷ)) 就不会有这个问题,因为y = 0时候error = -logŷ, 要让error尽可能小,那么就让ŷ最靠近1 (如果sigmoid). y = 1的时候error = -log(1-ŷ), 要让error 尽可能小,那么就让ŷ最靠近0。

LeCun, Y., Bengio, Y., & Hinton, G. (2015). Deep learning. Nature, 521(7553), 436-444. https://doi.org/10.1038/nature14539
这也是deep learning里面经典文章之一了。 作者主要是谈到了深度学习在supervised learning中的各种strategy (比如back-propagation,SDG) 和multi-layer architecture等方面的问题,包括ConvNets, distributed representation等诸多应用。其实深度学习的架构核心就是这种多层的简单模块的stack,以实现非线性的输入-输出的计算。深度学习的“化腐朽为神奇”就是在于这种架构里,每一层是非常有针对性的(作者提到selectivity这个很关键),并且增加representation的invariance,通过层层叠加,最后就实现了一个非常复杂的带有特定功能(比如对什么样的feature或者hallmark敏感,对什么样的背景不敏感) 的function。作者也提到weights as "knob" , 这个比喻让我想到了上次说到的机器学习中的我们在fine tuning中的orthogonalization的概念。一个经典例子是一台老式的收音机会有很多的knobs,假如你有个knob 可以tune 0.1 x frequency,+ 0.3 x channel, – 1.7 x volume,+ 0.8 x equalizer, 那么这个knob真的是牵一发动全身。 那么如果真的想要去做fine tuning会非常难。Orthogonalization就是说我们要一种聪明的方式设计 knob,一个knob(萝卜)一个坑。这个在调参的里面是很重要的一个methodology. 文章稍显不足的一点就是unsupervised learning这块谈得比较少,对representation learning 和complex
reasoning的结合也感觉点到即止。这也许是未来深度学习最有价值的方向之一吧!

2019.8.13

作业


i. 如图


Screenshot 2019-08-13 at 16.07.16.png

ii. W^T + b = -1
iii. 因为y等于1或者-1,-1的时候不等号两边同时乘以-1,不等号反向,一样得(wxi +b)yi >= 1
iv. 数据集满足线性可分的情况存在。
v. |c1-c2| / ||w|| = 2d
vi. 就是在(wxi +b)yi >= 1的约束条件下求min 1/2 ||w||^2
vii. 选2, 解法如图


求w1 w2 w3 b

2019.8.18

对于决策树算法的小结:
应该把更高information gain的feature放在根节点,而这个information gain本质上是特征与结果的相关度。然后条件熵表示在已知X的条件下,随机变量是y的不确定性H(Y|X)。 那特征A对训练集的information gain g(D,A) = H(D) - H(D|A) 从intuition 角度去理解,就是表示用D的不确定性的总情况的集合减去因为除了A外其他不确定导致的D的不确定,那么剩下的就是其他都确定,仅仅是因为A不确定的情况下D的不确定,也就是变相衡量A对D的影响。 给的例子是先算经验熵H(D),然后计算每个feature的information gain e.g. g(D,A1) = H(D) - H(D|A1) = H(D) - Σ pi (Y|X = Xi) = H(D) - Σ pi (-Σpj*logpj) 其中pi表示的是对feature A1, 如果x取值xi的时候概率,然后pj表示在这种情况下,x取值了xi后,y的一个分布的概率。
这五周一来的基本知识大部分都是吴恩达的ML里面讲过的内容,不过没有这么细致地推导数学构成。 ML本质就是有约束或者无约束情况下求极致的问题,拉格朗日大法和KKT条件大法,频率派极大似然大法好(注意和贝叶斯统计这种拿参数当做随机变量的区别)。关于PCA本质就是降维度。logistics regression就是一个mini NN, 关于为什么不能用最小二乘做J也讨论过了。 variance和bias区别和调参当中的应用。还讲了SVM, LDA,SMO, kernel function (polynomial或者gaussian). K-means也是很基础的做无监督学习的算法。

2019.8.20

a. 为什么在神经网络中加入非线性是必须的?因为都是线性的话,那最后学习的结果就是线性的,根本无法模拟非线性的函数。
b. softmax输出单元cross-entropy损失函数的梯度推导。回答见图。


推导softmax偏导.jpeg

c. 写出下列每个激活函数的表达式及其导数。总结各激活函数的利弊: 回答见图。


激活函数区别.jpeg

激活函数求导.jpeg

d. 用ReLu模拟函数:回答见图。


用ReLu模拟函数.jpeg

关于SVM多说两句:
最牛逼的地方其实不在于怎么使用KKT条件呀或者用SMO做QP问题啊,最牛逼的地方其实是对决策边界的法向量w求带约束条件的极值情况下如何使用拉格朗日函数得到关于lambda的方法。L = Σ λi - 1/2 * Σ Σ λi λj yi yj xi xj 这个就是使得SVM风骚这么多年的秘密。w是支持向量的线性组合w= Σ λi yi xi. 大部分 λi 都是0,非零 λi 对应的xi就是支持向量。 其中xi点乘xj这个是可以用核函数进行替换的。kernel相当于对x做了一个变换,你不需要知道这个变换是什么,但你只需要知道变化后两点点积就,换句话就是kernel 使得优化目标和决策函数有了一种非线性变换的能力。这样原本在空间里线性不可分的情况转变下就可分了,不同的kernel就是不同的效率。
参看:
https://blog.csdn.net/xlinsist/article/details/51311755

2019.9.2

a. 卷积操作的本质特征包括稀疏交互和参数共享,解释其特性和作用:
稀疏交互(sparse interactions)和参数共享(parameter sharing)其实体现了卷积运算的重要的思想:
首先说sparse interactions: 传统的神经网络使用矩阵乘法来建立输入与输出的连接关系,每一个输出单元与每一个输入单元都产生交互。然而,卷积网络具有sparse interactions的特征,这是通过使filter的大小远小于输入的大小来达到的。举个例子,一张图像的输入可能包含成千上万个像素点,但是我们可以通过只占用几十到上百个像素点的filter来检测一些小的有意义的特征,例如图像的边缘。这意味着我们需要存储的参数更少,不仅减少了模型的存储需求,而且提高了它的统计效率。这也意味着为了得到输出我们只需要更少的计算量。
然后说下parameter sharing。它其实是指在一个模型的多个函数中使用相同的参数。 在传统的神经网络中,当计算一层的输出时,权重矩阵的每一个元素只使用一次。而在卷积神经网络中,filter的每一个元素都作用在输入的每一位置上。卷积运算中的参数共享作用是它保证了我们只需要学习一个参数集合,而不是对于每一位置都需要学习一个单独的参数集合。当处理多个输入位置时,一些作用在邻居像素的函数是很有用的。例如在处理图像时,在卷积网络的第一层进行图像的边缘检测是很有用的。 相同的边缘或多或少地散落在图像的各处,所以应当对整个图像进行参数共享。
b. 既然说到到特性,那就不得不提pooling. 池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。 例如,最大池化(max pooling)函数给出相邻矩形区域内的最大值。那最大值有什么好处呢?其实是为防止过拟合提供的一种abstracted form of the representation,目的是down-sample输入层的表示(毕竟reducing the number of parameters了),减少dimensionality 以及允许对合并的子区域里保留的特征做出一定程度的假设。 所以本质就是一个 sample-based discretization 过程。 选I。 不选III的原因是特征的位置信息在这max pooling一步骤完全丢失。在卷积层其实是保留了特征的位置信息的,但是通过取唯一的最大值,现在在Pooling层只知道这个最大值是多少,但是其出现位置信息并没有保留.

你可能感兴趣的:(花书deep learning 笔记)