深度学习——知识点4

Q:数据不平衡怎么处理?

解决这个问题的方法主要有三种,三种各有各自的优缺点:

  • 下采样(Undersampling):随机删除具有足够观察多样本的类,以便数据中类的数量比较平衡。虽然这种方法非常简单,但很有可能删除的数据中可能包含有关预测的重要信息。
  • 过采样(Oversampling):对于不平衡类(样本数少的类),随机地增加观测样本的数量,这些观测样本只是现有样本的副本,虽然增加了样本的数量,但过采样可能导致训练数据过拟合。
  • 合成取样(SMOT):该技术要求综合地制造不平衡类的样本,类似于使用最近邻分类。问题是当观察的数目是极其罕见的类时不知道怎么做。
    尽管每种方法都有各自的优点,但没有什么固定的使用方式,需要根据实际问题不断自己尝试。现在将使用深度学习特定的图像分类问题来详细研究这个问题。

Q:什么是端到端的学习?

传统的图像识别问题往往通过分治法将其分分解为预处理、特征提取和选择、分类器设计等若干步骤。分治法的动机是将图像识别的母问题分解为简单、可控且清晰的若干小的子问题。不过分步解决子问题时,尽管可以在子问题上得到最优解,但子问题上的最优解并不意味着就能得到全局问题的最后解。深度学习提供了一种“端到端”的学习范式,整个学习的流程并不进行人为的子问题划分,而是完全交给深度学习模型直接学习从原始数据到期望输出的映射。


端到端的学习其实就是不做其他额外处理,从原始数据输入到任务结果输出,整个训练和预测过程,都是在模型里完成的。

 

Q:线程和进程的原理关系?死锁如何产生,如何解决?

一个程序多个进程,一个进程多个线程。线程,是进程的一部分,一个没有线程的进程可以被看作是单线程的。线程有时又被称为轻权进程或轻量级进程,也是 CPU 调度的一个基本单位。

区别:

最根本的区别:进程是操作系统分配资源的最小单位,线程是任务调度和执行的基本单位

1:地址空间:同一进程内的线程是共享进程的地址空间的,而进程之间地址是独立拥有的
2:内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。
3:进程间的切换花销较大,线程间切换花销较小
4:进程内一个线程死掉了,整个进程就挂掉了,而一个进程挂掉了,并不会影响其他进程的工作

总的来说要记住进程和线程之间是包含关系,一个程序至少要有一个进程,一个进程至少要有一个线程。


死锁定义:

多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。

2个人一起吃饭但是只有一双筷子,2人轮流吃(同时拥有2只筷子才能吃)。某一个时候,一个拿了左筷子,一人拿了右筷子,2个人都同时占用一个资源,等待另一个资源,这个时候甲在等待乙吃完并释放它占有的筷子,同理,乙也在等待甲吃完并释放它占有的筷子,这样就陷入了一个死循环,谁也无法继续吃饭/

死锁产生的原因
1) 系统资源的竞争

2) 进程推进顺序非法
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。


3) 死锁产生的必要条件
产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。

  •     互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
  •     不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
  •     请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
  •     循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。即存在一个处于等待状态的进程集合{Pl, P2, ..., pn},其中Pi等 待的资源被P(i+1)占有(i=0, 1, ..., n-1),Pn等待的资源被P0占有,如图2-15所示。

如何避免死锁

在有些情况下死锁是可以避免的。三种用于避免死锁的技术:

  1. 加锁顺序(线程按照一定的顺序加锁)
  2. 加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)
  3. 死锁检测

一个可行的做法是释放所有锁,回退,并且等待一段随机的时间后重试。一个更好的方案是给这些线程设置优先级,让一个(或几个)线程回退,剩下的线程就像没发生死锁一样继续保持着它们需要的锁。

 

Q:网络初始化有哪些方式?公式是?初始化过程?

  • 把w初始化为0
  • 对w随机初始化
  • Xavier initialization
  • He initialization

Xavier初始化方法

https://blog.csdn.net/shuzfan/article/details/51338178

“Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文《Understanding the difficulty of training deep feedforward neural networks》,可惜直到近两年,这个方法才逐渐得到更多人的应用和认可。

MSRA初始化方法

本次简单介绍一下MSRA初始化方法,方法同样来自于何凯明paper 《Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification》.

Q:尺度剧烈变化怎么解决?

多尺度:

图像金字塔;

特征金字塔 fpn

Q:LR损失函数是什么?LR梯度如何表示?为何用log而不是均方差

优点

  • 实现简单;
  • 分类时计算量非常小,速度很快,存储资源低;

缺点

  • 容易欠拟合,一般准确度不太高
  • 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分

损失函数:

现在开始求导:

通常来说,是用梯度下降法来求解的,所以会在损失函数前面加个负号求最小值,所以最终的导数变成:

逻辑回归模型预估的是样本属于某个分类的概率,其损失函数(Cost Function)可以像线型回归那样,以均方差来表示;也可以用对数、概率等方法。损失函数本质上是衡量”模型预估值“到“实际值”的距离,选取好的“距离”单位,可以让模型更加准确。

1. 均方差距离

用均方差作为损失函数,当模型完全预估错误时(y=1, p=0; 或y=0, p=1),损失是1。预估正确时,损失是0。错误值离正确值的“距离”相对较小,区分度不大。

另外,上面的损失函数相对θ

并非是凸函数,而是有很多极小值(local minimum)的函数。因此,很多凸优化的算法(如梯度下降)无法收敛到全局最优点。

2. log距离

 均方差作为LR模型的距离衡量标准,最“预估错误”的惩罚太过柔和。因此,最后训练出来的模型会出现较多的“极端”预估错误情况。另外,均方差损失函数的非凸性也限制了其使用价值。

log距离作为损失函数的公式如下:

式(2)与式(1)的区别如下图所示:

 

3. 概率距离

LR模型预估的是概率,自然的,损失函数可以用联合概率分布来衡量。

比较式(2)和式(3)可知:

由于log函数为单调递增函数,log距离和概率距离本质上是一样的,训练得到的结果也应该一致。

 

Q:SVM核函数公式,损失函数,和LR有哪些区别

原理不同,损失函数不同,对数据影响范围不同,正则化不同

我们再来比较一下logistic regression和SVM的(第二种)目标函数:
[公式]
[公式]
可以看出,二者的唯一区别就是对于单个数据点,计算损失的方法不同。
Logistic regression中的[公式]称为log loss
而SVM中的[公式]称为hinge loss


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值