小白带你刷面试—1

微信公众号:小白算法
关注可了解更多算法,并领取免费学习资料。问题或建议,请公众号留言;
小白算法,一个人人都能懂的知识公众平台。

写在前面:“小白带你刷面试”是我们在“小白带你学算法”之后又新开的第二个主题板块,在这我们将主要围绕机器学习/深度学习,算法知识,图像处理,编程语言方面的内容,以一问一答形式展示面试题目内容:这里我们开始第一篇,8个问答题目。

目录

1. CNN问题

2. 卷积核操作维度问题

3. Dropout处理问题

4. 过拟合问题

5. 机器学习三要素

6. Softmax公式推导

7. KNN问题

8. K-means


1. CNN问题

CNN最成功的应用是在CV(计算机视觉),那为什么NLPSpeech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性?

答:CV(计算机视觉),NLPSpeechAlphaGo的围棋问题,几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。如下图:低层次的直线/曲线等特征,组合成为不同的形状,最后得到汽车的表示。

CNN抓住此共性的手段主要有四个:局部连接/权值共享/池化操作/多层次结构

  • 局部连接使网络可以提取数据的局部特征;

  • 权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图片(或者语音/文本) 中进行卷积;

  • 池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。

如下图所示,为卷积神经网络的运算示意图:

略---见微信公众号内附图


2. 卷积核操作维度问题

假设输入一个维度为224x224x3的数据,然后采用5个大小为7x7、边界值为0的卷积核进行数据操作,那么神经网络下一层所接收到的数据维度是多少?

A、218x218x5

B、217x217x8

C、217x217x3

D、220x220x5

解析:选A,

首先,输入数据,经过5个卷积核操作,输出的channel肯定等于5,排除BC; 

法一:其次,边界值为0,不采用padding形式进行填补,故经过7x7的卷积之后,上下左右均少了3个数据,故224-3x2=218,所以是218x218x5。

法二


3. Dropout处理问题

假设我们有一个5层的神经网络,这个神经网络在使用一个4GB显存显卡时需要花费3个小时来完成训练。而在测试过程中,单个数据需要花费2秒的时间。 如果我们现在把架构变换一下,当评分是0.2和0.3时,分别在第2层和第4层添加Dropout,那么新架构的测试所用时间会变为多少?

A、少于2s

B、大于2s

C、不变

D、说不准

解析:选C,Dropout在网络训练阶段,采用随机失活的方式,避免过拟合,增强网络的鲁棒性; 
预测阶段,Dropout并不存在失活现象,故在架构中添加Dropout这一改动仅会影响训练过程,而并不影响测试过程,测试时间不变。


4. 过拟合问题

下列的哪种方法可以用来降低深度学习模型的过拟合问题?

(1) 增加更多的数据或data augmentation

(2) Dropout

(3) 正规化数据

(4) 降低架构的复杂度

解析:全选, 
(1)数据就好比考试的卷子,过拟合就是把卷子背会了,不知道有没有学到知识的精髓,这个时候增加数据量,就能够让模型学到更多,从而提炼出更加准确的内容; 
(2)Dropout前面也说过一次,模仿人学习时而会忘记这样的情况; 
(3)在原始的代价函数后面加上一个L1,L2正则化项 ,通过约束参数的范数使其不要太大,使得权重衰减,所以可以在一定程度上减少过拟合情况;
(4)降低模型复杂度,复杂度越高,越容易把知识背下来,在训练集上变现异常优异,在测试集上表现异常的差。


5. 机器学习三要素

数据、算法、模型

  • 略---见微信公众号内附图

  • 数据:输入数据包括:用户对商品的浏览、点击历史行为数据以及相应的用户商品特征数据。这些历史数据记录了什么样的用户点击了什么样的商品,什么样的用户对什么样的商品看了没有点击。我们认为这些历史数据中蕴含了某种规律,希望机器学习能把这种规律挖掘出来,在将来面对新的用户和商品时,就能预测是否会点击。

  • 算法:机器学习算法有很多,逻辑回归、随机森林都适用于这个场景,但这里我们先不对具体的算法作展开,暂时读者只需要概念性的知道,基于输入数据执行“算法”便可产生模型(模型就代表了学习算法从数据中挖掘出的规律)。

  • 模型:学得模型之后,面对新的用户和商品,模型就能作出相应的判断,用户会点击还是不会点击。利用模型的这个“技能”,我们便可以做到给每个用户推荐他最感兴趣的商品了。


6. Softmax公式推导

7. KNN问题

KNN(K-Nearest Neighbor,译作 K-近邻居)算法是:

  • 通过测试不同特征值之间的距离进行分类的算法;

  • 是一种既可以用于分类,又可以用于回归的非参数统计方法;

  • 有监督学习。

描述算法思路:

描述算法步骤:

代码块实战:对一组数据分类

from numpy import *

def creatDataSet():
    group=array([[1.0,2.0],[1.2,0.1],[0.1,1.4],[0.3,3.5]])
    labels=['A','A','B','B']
    return group,labels

def classify(input,dataSet,label,k):
    dataSize=dataSet.shape[0]
    ##欧式距离
    diff=tile(input,(dataSize,1))-dataSet  #tile功能是重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组
    sqdiff=diff**2
    squareDist=sum(sqdiff,axis=1)###行向量分别相加,从而得到新的一个行向量
    dist=squareDist**0.5
    #print(dist)

    sortedDistIndex=argsort(dist)#argsort()从大到小进行排序,返回下标
    print("排序结果下标:",sortedDistIndex)

    classCount={}
    for i in range(k):
        voteLabel=label[sortedDistIndex[i]]
        classCount[voteLabel]=classCount.get(voteLabel,0)+1
    print("K分类的类别和投票数:",classCount)

    maxCount=0
    for key,value in classCount.items():
        if value>maxCount:
            maxCount=value
            classes=key

    return classes

if __name__=='__main__':
    dataSet,labels=creatDataSet()
    testData=array([1.1,0.3])
    K=3
    output=classify(testData,dataSet,labels,K)
    print("测试数据为:",testData,"分类结果为:",output)

输出结果

8. K-means

  • K-means 是一种聚类方法;

  • k 是一个常数值,由使用者指定,这种算法负责将特征空间中的 n 个向量聚集到 k 个簇中;

  • 在机器学习领域,聚类属于一种无监督式学习算法。

K=3时的聚类举例:

略---见微信公众号内附图

算法步骤

其算法运行过程大致如下: 
Step 0:用户确定 k 值,并将 n 个样本投射为特征空间(一般为欧氏空间)中的 n 个点(k⩽nk⩽n); 
Step 1:算法在这 n 个点中随机选取 k 个点,作为初始的“簇核心”; 
Step 2:分别计算每个样本点到 k 个簇核心的距离(这里的距离一般取欧氏距离或余弦距离),找到离该点最近的簇核心,将它归属到对应的簇; 
Step 3:所有点都归属到簇之后,n 个点就分为了 k 个簇。之后重新计算每个簇的重心(平均距离中心),将其定为新的“簇核心”; 
Step 4:反复迭代 Step 2 - Step 3,直到簇核心不再移动为止。

小白带你刷面试的1-8题的内容理解到了吗?该系列持续更新中,想get更多有趣的算法知识,或者提出宝贵意见,请关注微信公众号“小白算法”并联系我们,谢谢!!!

猜你喜欢

转载自blog.csdn.net/wsLJQian/article/details/85680537