菜鸟面试记录

问题汇总

关于BN 学习的参数,当时回答的是 gamma和beta(rescale和 shift)。面试官指出还有scale,不知道是不是指rescale?

各种秋招提前批都在开始,大佬们都开始收割offer了,神仙打架的算法啊。自己非科班出身,错过了春招实习,明年6月毕业,想着能踏踏实实的去做一份实习转正,就投了两份简历,超级幸运的是都收到了面试的电话。
第一家是之前实习的公司dev部门,面试的小姐姐还在车上,简单的聊了

  1. 深度学习的发展(经典网络的发展,优缺点)
  2. 各种网络的应用(目标检测和分割),
  3. 语音方向(了解很少,卒(´Д` )。
  4. 上过的深度学习的课程和项目经验
    第二家是自己特别特别心仪的公司,投递简历20分钟就收到了hr小姐姐的反馈,hr小姐姐沟通地也超级赞,真的受宠若惊。
    1. 自我介绍
    2. GAN网络介绍
    3. cv基础知识:(bn、relu、bagging和boosting)
    4. 算法:求子集(无重复,递归)& 求子集(有重复,先枚举不重复的数字,枚举每个数出现个数0-k)

Bagging 和Boosting

https://zhuanlan.zhihu.com/p/34534004

两者都属于集成学习,由多个弱分类器组合。每个弱分类器都采用相同的方法训练。

bagging

BaggingBoosting
训练每次从原始数据集中等概率有放回选择样本,训练得到基分类器。每次抽样的样本分布都不一样。每次迭代都根据之前的结果,增加被错误分类的样本权重。不断学习和提升
并行训练串行训练
分类投票表决,每个分类器权重一样投票表决,加权平均,好的分类器权重大
应用随机森林(Random Forest)GBDT,XGBoost,LightGBM
适用场景解决过拟合问题,建立m个不同的分类器,以到达防止过拟合问题,使模型更准确。单个模型的性能较差,进行boosting,不断改正错误使模型更准确。

BN(batch normalization)

  1. 归一化:统一在0-1之间的统计概率分布。输入信号归一化,样本的输入信号均值接近于0,均方差相比很小。

  2. 为什么要归一化?

    1. 引入归一化,后续数据处理方便,加快网络的收敛速度。

    2. 神经元的激活接近于0或接近于1会保护,梯度为0。避免神经元饱和。保证输出数据中数值较小的值不会被吞食。

    3. 同一量纲,样本数据的评价标准不一致,需要对其量纲化,统一评价标准

    4. 神经网络中,经过 $ \sigma(WX+b) $ 矩阵乘法和非线性运算,数据分布可能改变,多层运算后,数据分布变化越来越大,在中间层进行归一化。

  3. BN:破坏了原来的数据分布。
    x ^ i = x i + μ β σ β 2 + ϵ \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon} x^i=σβ2 +ϵxi+μβ
    重构,对经过上面归一化处理得到的数据进行重构,得到
    y i = γ x ^ i + β y_i = \gamma \hat x_i + \beta yi=γx^i+β
    其中, γ , β \gamma, \beta γ,βrescaleshift两个可学习参数

  4. BN适用场景:

    1. 在CNN中,BN在激活函数之前,解决收敛速度慢,梯度爆炸问题。
    2. 一般也可以加入BN来加快训练速度,提高模型精度。
    3. 依赖mini-batch,一般batch size比较大,且数据分布较为接近。
    4. 需要统计mini-batch的一阶(均值)和二阶统计量(方差),不适合动态的网络结构和RNN网络(weight normalization)。
    5. 基于mini-batch的数据计算均值和方差,不是基于整个训练集,进行梯度计算引入噪声。不适合对噪声敏感的强化学习和生成模型(GAN、VAE)。

ReLU(激活函数)

https://www.zhihu.com/question/29021768

preview

f ( x ) = m a x ( 0 , x ) f(x) = max(0,x) f(x)=max(0,x),经过非线性的activation,传入下一层,非线性激活函数的叠加,使得神经网络可以获取复杂的特征。

作为激活函数,ReLU易于计算,分段线性满足非线性。

当输入大于0,没有饱和区的导数为0的情况,输出值可以无限;导数为1,反向传播时一定程度解决梯度消失。

单侧抑制,小于零的神经元dead。

初始化:he初始化。(MSRA initialization)

缺点:不是zero-centered;<0部分,神经元某些神经元永远不会被激活,相应的参数永远不更新(注意参数初始化,learning rate)

求子集(有重复元素)

输入:[2,1,2,2]

输出:[2],[1],[1,2],[2,2],[1,2,2],[2,2,2],[2,1,2,2]

利用set去重之后,运行效率会低。

  1. 枚举不同的数字,枚举到数x时,求出x的个数,

  2. 枚举集合中放入0,1,2,…,k个x,k+1种情况。

  3. 枚举完最后一个数字,选定了一个集合,集合加入答案中。

复杂度分析:

不同子集最多有 2 n 2^n 2n,存储答案需要 O ( n ) O(n) O(n),时间复杂度, O ( n 2 n ) O(n2^n) O(n2n)

class Solution{
public:
  vector<vector<int>> ans;
  vector<int> path;
  
  vector<vector<int>> subsetWithDup(vector<int> &nums){
    sort(nums.begin(),nums.end());
    dfs(0,nums);
    return ans;
  }
  void dfs(int u, vector<int> &nums){
    if(u == nums.size()){
      ans.push_back(path);
      return;
    }
    int k = u;
    while(k<nums.size()&&nums[k]==nums[u]) k++;
    dfs(k,nums);
    for(int i=u;i<k;i++){
      path.push_back(nums[i]);
      dfs(k,nums);
    }
    path.erase(path.end()-(k-u),path.end());
  } 
};

总结反思

面试的是自己特 别心仪的公司,投递简历20分钟就收到了hr小姐姐的反馈,hr小姐姐沟通地也超级赞,真的受宠若惊。因为之前下午的面试有点受打击,晚上自我介绍都磕磕巴巴,特别巧的是这几天在读的论文可能还是这个组发的,所以心都要从嗓子眼跳出来了。之后要开始更多的面试,所以针对这次特别特别重要的面试,总结了一下主要的问题:

  1. 深度学习基础不扎实。
    1. 面试官很耐心的指出无论做什么方向,基础的知识都要很扎实,
    2. 学习不能停下来,在学习的时候也要问一问为什么呢,这样之后才可以灵活的运用。
  2. 算法相关要多准备
    1. 刷题的同时要能清楚的说出解题思路和分析过程
    2. 在实际项目中高效的算法很有用
  3. 面试时要自信,不能怕出错,多沟通,及时反馈问题和疑问。
    1. 自己在面试的过程中,信号不太好,所以有的时候面试官和我互相没听见对方说什么,所以还是要多沟通一些
    2. 面试时间很短,但收获还是很多
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值