1.头条
重构二叉树
2.百度
快排,字符串编辑距离,青蛙过河。
逆序对问题
3.高德
双快排变型(字符+数字; 荷兰国旗问题),打印对角线数组=>顺时针打印
4.京东
5.百度
跳马问题,随机概率权重的选择
6.百度
旋转数组的二分查找
7.竞技世界笔试
召回率,曼哈顿距离,最小覆盖子串
8.依图笔试
区间覆盖坐标轴点数,(二分查找变型: 第一个大于等于target的index)
9.贝壳笔试
化简结成后为1+…+1/n>K; 残缺的数字(难,放弃); 简单的二维DP(锯子斧子砍树); 图论
10.360笔试
立方体表面积,进制最小转换
11.百度地图面试
1.定义宏拿到类中变量的偏移 2.有效乘积运算符号的栈 3.滑动窗口某个IP出现最多的次数 4.相邻的连续两个数值差值不超过1,target存在的可能性?
虚函数表(继承时的变化)+析构函数; BP的原理; feature_map的计算
11.腾讯笔试
12.美团面试
1.0/1背包问题 2.DFS回溯搜索 3.LR类
13.京东笔试
消消乐,迷宫
14.快手笔试
tag打散,最长非重复子串,二元一次方程
其它:
https://www.nowcoder.com/discuss/205497
-
sigmod和relu的区别?
sigmod存在梯度消失的问题,产生原因在于: 参数w的更新梯度 = loss/输出值的梯度 * 输出值/激活函数的梯度 * 激活函数/w的梯度
其中输出值/激活函数的梯度 导数趋于零,导致只有靠近输出层的参数才能有比较好的训练
relu?
输出值/激活函数的梯度为1,0 缓和梯度消失的问题。 缺点: 梯度为0导致w不被更新 ==》 likealy-relu -
sigmod的取值范围 (0,0.25]
-
分类问题为什么不使用回归MSE??
-
梯度消失和损失函数有关吗?
梯度值 = 三项乘积(链式法则),第一项是关于损失函数的loss。 但是梯度消失更多是不断反穿过程中的消失,和损失函数关系不大。
损失函数的选择不是梯度消失的根本原因。 -
防止梯度消失/爆炸的方法? 1.爆炸: 预训练+微调;梯度裁剪;L2正则(weight decay);BN层 2.消失:BN层;Relu激活函数;残差网络;LSTM而非RNN
-
深度学习防止过拟合? 1.BN+DropOut 2.图像:数据增强 3.损失函数加入正则(optimazier+weightd decay) 4.bagging,subsample(特征之间独立同分布)
-
stacking(e.g. stacked-Lstm)和blending
-
正则项: L0 参数矩阵非零元素个数,相比较L1正则更难优化求解所以选择L1正则做特征稀疏化
-
判别模型(大部分常见机器学习模型,根据X判别Y)和生成模型(朴素贝叶斯,联合概率中较大的为预测值)
-
苏格拉底麦穗问题 1/e作为切分点,记录前N/e中最大的麦穗
-
LR和Adaboost区别?(LR更新w来靠近错误样本? 而Adaboost增加错误样本出现的概率?) AdaBoost和GBDT区别?
-
概率题=随即发生器,rand5(),剪绳子,送报纸
-
正定:实对称矩阵,且满足所有特征值都是正的。 ==> X’AX > 0
-
半正定: X’AX >= 0
-
2个33的卷积核的感受野 == 55的卷积核的卷积核
-
L1正则: 数据分布先验是拉普拉斯 L2正则: 数据先验分布是高斯
-
协同过滤
UserCF: 兴趣相近的TopK其他用户喜欢的物品推荐给当前用户
更依赖于相近兴趣用户的共同的行为 => 欠缺个性化,实时性差(用户的新行为不能及时导致推荐结果变化)
ItemCF: 把用户历史观看过的相似物品做召回
行为过物品很多的话,召回更多的相似物品,可挖掘的长尾信息也更多 => 个性化强,实时性强(用户新行为能很及时导致召回相似的物品)
目的: 当用户在其他频道浏览完长视频,切换到小视频频道时,也能很快给他推荐相似的视频
任务: 拿到融合所有信息的item-item的倒排表。最后只需要把小视频召回的长视频ID在倒排表里面删除
用户:历史行为==> pair对,统计出现次数作为这个pair对的相似度。获得item-item倒排表,对于item再取topK即可。实际使用过程中还会pair对出现次数过多的做惩罚 + 归一。
e.g. pair对出现的次数/(这两个元素出现的次数总和)
1.用户的长视频信息和小视频信息做融合,按照时间的先后排序。获取视频的倒排表,再把value中的长视频删除掉。 这样就可以通过长视频的喜欢(来自用户画像)来召回小视频了。
2.重构下scala代码,输入时候把长视频加符号标识,输出物品倒排表时把value中的长视频删除,key中长视频删除特殊符号
3.尝试过优化过排序方式,长视频观看时长,长视频观看时长/用户长视频观看时长中位数。
和word2vec原理类似的。
1)构造样本的时候,拿用户的观看历史,其实就是一连串的视频ID,作为sentence,段落。把所有的用户的观看视频历史行为,作为corpus语料库。再用cbow或者skip-gram模型做训练。就得到视频ID的embedding。
2)实际使用中限制[5,500]长度,避免不活跃或者过于活跃的用户
2)实际使用过程中,还会加入视频的一些标签作为side-information一起做训练(自拍 withindex)。来拿到一些标签的embedding,当出现不在词表里面的视频id,可以把它的标签数据做平均,缓解冷启动问题
3)优化: 出发点: 用户不同session下感兴趣的内容不同的。预测的滑动窗口内的视频类型一致性
3.1) session的时间选取,所有视频间隔从小到大排序,累计概率的95分位,大约是700s来切割用户的历史行为。
3.2) ABtest几个主要指标有提升,上线。
Cbow: 把中心单词周围的单词的embeding做平均,去预测中心单词,梯度更新时也是平均分配到周围单词。低频的单词预测效果不够准确。
Skip-gram: 每一个中心词去预测周围所有单词,做K遍预测,embedding更准确。 特别是当语料库有大量低频次单词时
#
1)索引的概念: 精确匹配 l2距离或者内积距离作为index; 其他index都是对向量维度压缩后的非精确匹配
2)聚类: KNN=KD树;思路类似hashmap,把相同的key值放在同一个单元中,再去搜索时候只需要在某个单元里和它相邻的单元里搜索
- 每一个向量有自己的索引
- 基础算法: PCA降维 or ProductQuantizer编码解码 + KNN分类 + kd树 or LSH 搜索(相同key,或者临近的key中搜索)
- 选择合适的index? 精确匹配:flat Memory: HNSWx(内存足够,mem=(d * 4 + x * 2 * 4),x是向量的索引)
- 搜索查找算法: KD树 1.寻找每一维度的中位数划分空间 2.二叉树每一层对应同一维度
- LSH局部敏感哈希算法 == 降维之后评判相似度(前提: hash函数的转换前后,依然能表征相似度)
和item2vec区别点主要是在于构造样本集的方式不同
- 构建图,节点是ID,有用户历史相连的行为就构造边 如何构建边??
- 由一个节点出发,deep walk,步长 => p,q概率值来确定BFS DFS游走
- 实际使用时候=> 选择无向图还是有向图;限制一个节点的度数(作为对于热门物品的惩罚);实际使用中偏向于DFS
- 所有节点都出发一次,但是只有7天的数据数据量偏小
#
1)基于内容标签&精品池; 用户画像的标签
2)LDA主题聚类 等等聚类算法
3)YoutubeDNN NN模型 ==> embeding layer + 手工特征 ,通过BP反向训练embeding layer - https://zhuanlan.zhihu.com/p/58160982 (不错的文章)
- Transformer & self-attention ???
- FM直观理解: 每一个特征都有自己的embedding,时间效率降低为O(K*N) 原来直接做二阶组合:O(N^2)
解决的问题: 商品和商品的相关性矩阵,某个用户对于物品的评分。 从中抽取topK的商品推荐给用户,要求:商品和用户之间相关性强,商品之间具有多样性。
传统方案: 直接抽取Topk(没有考虑商品之间的多样性)
DPP: 抽样过程,存在实对称的,半正定矩阵。刻画抽取子集的概率子集对应的行列主子式的值
把商品的embeding分解成两个向量ri,fi. fi是商品自