- Sep 2018
-
192.168.199.102:5000 192.168.199.102:5000
-
简单记忆训练 DNN 的技巧:
对于坏习惯, 早弃则自活
前三个针对训练误差小测试误差大的情况;
后两个针对训练误差就很大的情况;
tips for good training but bad testing
- (早)Early Stopping
- (弃)Dropout
- (则)Regularization
tips for bad training
- (自)Adaptive learning rate(optimizer)
- (活)New activation function
dropout
- 训练的时候
每一次更新参数之前(我们一般一个 mini-batch 更新一次参数,也就是每个 mini-batch 都对神经元做一次随机丢弃),对每一个神经元(包括input layer,这点要注意)做丢弃:
1 mini-batch -> 1 dorpout -> 1 thin-network
每一个神经元都有 p% 几率被丢弃,所有与被丢弃的神经元相连的权重 w 也都会被丢弃,这样整个网络的结构就变了,深度不变宽度变窄。
dropout 毫无疑问会让训练结果变差,因为整体模型复杂度降低了。
- 测试的时候
需要注意两点:
- 测试的时候不对神经元做丢弃
- 测试的时候每个权重都乘以 (1-p%): w * (1-p%)
为什么 dropout 测试机权重需要乘以 (1-p%)
假设 dropout rate 设为 50%, 在训练的时候我们得到的某个神经元的输出 \(z\) ,是丢弃了输入层一半的神经元及权重得到的:
\(z=f([x1,x2,x3,x4])\) --> \(z=f([x1,x4])\)
在测试的时候这个由于不做任何丢弃:
\(z=f([x1,x2,x3,x4])\))
该神经元的输出大约会是原来的两倍:
\(f(\vec{x}) = w * x + b\)
\(f([x1,x2,x3,x4]) \approx 2 * f([x1,x4])\)
\(w_{new} = 0.5 * w_{old}\) ,这样:
\(f([x1,x2,x3,x4]) \approx f([x1,x4])\)
-
one step further
为了防止 overfitting,防止参数量太多而引起的数据集和模型的优化方向 mis-match 的情况。我们经常人为设定:
\(\Sigma_1 = \Sigma_2\)
需要说明的是:如果做了公用 \(Sigma\) 这种假设的话,最后得到的就是一个直线边界,不做这一假设的话得到的是一个曲线边界。
likelihood 公式就变成:
\(N1 = num(samples of C1)\)
\(N2 = num(samples of C2)\)
\(L(\mu_1, \mu_2, \Sigma) = f_{\mu_1,\Sigma}(x^1)f_{\mu_1,\Sigma}(x^2)f_{\mu_1,\Sigma}(x^3)......f_{\mu_1,\Sigma}(x^{N1}) * f_{\mu_2,\Sigma}(x^1)f_{\mu_2,\Sigma}(x^2)f_{\mu_2,\Sigma}(x^3)......f_{\mu_2,\Sigma}(x^{N2})\)
对上面的式子可以通过微分,或者直接记住下面的公式解(其中 \(\mu_1\) \(\mu_2\) 跟原来一样,都是 样本的均值,\(\Sigma\) 是某类别的样本比例作为权重的 \(\Sigma\) 之和):
\(\mu_1 = avg(sample of C1)\)
\(\mu_1 = avg(sample of C1)\)
\(\Sigma = \frac{N_1}{N_1+N_2}\Sigma^1 + \frac{N_2}{N_1+N_2}\Sigma^2\)
-
直接用【线性回归】模型解【分类问题】的弊端
线性回归的标签值 \(y\) 都是实数(亦即可能任意大or任意小),同时线性回归的代价函数是平方误差 \((y-\hat{y})^2\) --- square error. 而代价函数又会通过 GD 直接影响 w 和 b --- 分界线。
在分类问题中,无论错误程度多高,错点的代价永远算作‘1’;而在线性回归中,做错点的代价与他的错误程度平方正比(远大于1)。两者的代价函数不一样,两者得到的函数(分界线)就肯定不一样。
-
从逻辑斯回归到神经网络
logistic regression 有非常严格的使用限制,线性可分。
logistic regression 虽然可以理解为对分布的近似,但其本质仍然是一个直线分界线,因为他也是要求出 w 和 b,使用的函数集仍然是 wx+b = y , 也就是要求数据集必须是线性可分的。
如果遇到线性不可分的数据集,可以考虑采用特征转换。但如何做特征转换呢?
一个很好的方法是cascading logistic regression models --- 把很多个 logistic regression 接起来,就可以做到这件事情。这个东西有点像是在解释 NN,以及为什么他可以做到自动化 feature transform, 然后做分类。
李老师由此引入 "Neuron" 概念:
每一个逻辑斯模型的输入可以是其他逻辑斯模型的输出。
他们可以串在一起形成一个网络,这个网络就叫做神经网络。
-
多分类任务
主要就是利用 softmax:
第一步:计算 score
z1 = w1 * x + b1
z2 = w2 * x + b2
z3 = w3 * x + b3
第二步:对 score 做 exponential normalization
\(y_{1} = \frac{e^{z_{1}}}{\sum^3_{j=1}e^{z_{j}}}\)
\(y_{2} = \frac{e^{z_{2}}}{\sum^3_{j=1}e^{z_{j}}}\)
\(y_{3} = \frac{e^{z_{3}}}{\sum^3_{j=1}e^{z_{j}}}\)
第三步:以 yi 表示 P(Ci | x) --- x 属于第i个分类的预测概率
\(y_i = P(C_i | x)\)
为什么叫做 softmax 呢? exponential 函数会让大小值之间的差距变的更大,换言之他会强化最大值。
-
生成模型 vs. 判别模型
总体来看,如果样本足够多,判别模型的正确率高于生成模型的正确率。
生成模型和判别模型最大的区别在于,生成模型预先假设了很多东西,比如预先假设数据来自高斯,伯努利,符合朴素贝叶斯等等,相当于预先假设了 Hypothesis 函数集,只有在此基础上才有可能求出这个概率分布的参数。
生成模型,进行了大量脑补。脑补听起来并不是一件好事,但是当你的数据量太小的时候,则必须要求你的模型具备一定的脑补能力。
判别模型非常依赖样本,他就是很传统,死板,而生成模型比较有想象力,可以“想象”出不存在于当前样本集中的样本,所以他不那么依赖样本。
关于 想象出不能存在于当前样本集的样本 ,见本课程 40:00 老师举例。
生成模型在如下情形比判别模型好:
- 数据量较小时。
- 数据是noisy,标签存在noisy。
- 先验概率和类别相关的概率可以统计自不同的来源。
释疑第三条优点:老师举例,在语音辨识问题中,语音辨识部分虽然是 DNN --- 一个判别模型,但其整体确实一个生成模型,DNN 只是其中一块而已。为什么会这样呢?因为你还是要去算一个先验概率 --- 某一句话被说出来的概率,而获得这个概率并不需要样本一定是声音,只要去网络上爬很多文字对话,就可以估算出这个概率。只有 类别相关的概率 才需要声音和文字pair,才需要判别模型 --- DNN 出马。
-
-
github.com github.com
-
@mingrutar - Correction: config = tf.ConfigProto() config.gpu_options.allow_growth = True session = tf.Session(config=config)
当运行 keras 进行模型训练时,如果遇到以下错误:
failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
可以添加这样的语句,如此之后可以正常运行了。
Tags
Annotators
URL
-
- Nov 2017
-
genomebiology.biomedcentral.com genomebiology.biomedcentral.com
-
MCC
Matthews correlation coefficient
-
- Oct 2017
- Jun 2017
-
offconvex.github.io offconvex.github.io
-
One explanation of Non-convex optimization
Tags
Annotators
URL
-
- May 2017
-
www.analyticsvidhya.com www.analyticsvidhya.com
-
Precision: It is a measure of correctness achieved in positive prediction i.e. of observations labeled as positive, how many are actually labeled positive. Precision = TP / (TP + FP) Recall: It is a measure of actual observations which are labeled (predicted) correctly i.e. how many observations of positive class are labeled correctly. It is also known as ‘Sensitivity’. Recall = TP / (TP + FN)
Example: In cancer research you may want higher recall, Since you want all actual positive observations to classified as True Positive. A lower Precision maybe alright because some healthy people classified as cancerous can be rectified later.
-
- Apr 2017
-
demo.clab.cs.cmu.edu demo.clab.cs.cmu.edu
-
if your goal is word representation learning,you should consider both NCE and negative sampling
Wonder if anyone has compared these two approaches
-
- Feb 2017
-
sebastianraschka.com sebastianraschka.com
-
Feature scaling in depth tutorial
-
- Dec 2015
-
cs231n.stanford.edu cs231n.stanford.edu
-
some of the deep learning libraries we may look at later in the class
what c++ libraries are used?
-
- Apr 2015
-
arxiv.org arxiv.org
-
Same as above but the pre- trained vectors are fine-tuned for each task.
How?
Backpropagating to the input layer, changing the vector representation with the training examples?
-
- Sep 2014
-
sites.psu.edu sites.psu.edu
-
you
us
-
you
we
-
your
our
-
your
our
-
your
our
-
ethical challenges.
the ethical challenges you will come up against along the way.
-