第二篇(基础模型篇)已更新!
在前段时间的校招应聘经历中,我发现有时候即使面试官问的问题基本都回答上来了,最后还是没有通过面试,这固然跟自己是非科班、没有论文和相关实习经历有关,但自己的表现在横向对比中没有亮点也是很重要的原因。在前者硬实力短期没有办法提高的情况下,我开始思考如何提升自己的软实力,所以有了这个个人知识库。
这个系列内容主要针对校招机器学习算法岗面试,因为入门机器学习的学习资料基本上无外乎小蓝书、西瓜书、葫芦书、CS229等耳熟能详的书籍和课程,校招面试时很多人的知识体系应该会高度重合(大佬除外),这导致了很多应聘学生对常见面试题的答案都比较雷同。在没有实习、论文等硬实力加持的同时,算法岗竞争又异常激烈,面试就会演变成一个玄学现场,通过与否更多的在于匹配到了哪位面试官。每位面试官看人的标准都不一样,如果自己有幸在面试中表现出来的亮点被看到并欣赏,固然是好事,但在短期无法再把简历做的更漂亮的情况下,我更希望能占据主动,而非把掌握权交给运气。
面试是有很多常见问题的,这是个很好的突破口。一开始对待这些常见问题我只是临场去思考答案、组织语言,比如被问到“过拟合怎么解决”,我会回答“简单模型、正则化、Bagging、Dropout等等”,这样的答案太简短,可能大部分应聘人回答的都是这些,如果让自己对同样问题的答案跟别人不同,更有逻辑性和广度,最好能包含自己的理解,或许在横向对比中会更加占据优势。
如果把面试看作考试,那么就有填空题和问答题。我把答案只有几个字的问题叫做填空题,比如“ROC曲线的横纵轴是什么”“XGBoost与GBDT最主要的不同点”,填空题主要考察对知识是否了解。面试中更多的是问答题,回答的长度、深度、阐述逻辑由自己决定,面试官能从回答中看出一个人的表达能力、对知识的理解程度。
本系列内容主要针对面试中的问答题,是我在面试期间自己做的word文档,里面包含了机器学习面试的高频问题和自己的回答,在一般的面试中可以押中原题或者变种。当然也有很多面试问的都是非常规问题,比如字节跳动三面的leader面,更看基本功和临场反应,那已经不在本系列的范畴中了。本系列面向的对象是自学转行时间不长的同学,如果有条件还是强烈建议去找个大厂或者AI独角兽实习,在实际工程应用中提高自己的硬实力才是上策。这一篇内容主要来自《百面机器学习》,答案是根据自己的理解、比赛经历撰写出来的,由于笔者只是个自学入门半年多的在校生,回答不一定正确,也可能只match我简历上的项目,建议有需要的人自己根据问题思考适合自己的回答。
①消除量纲影响(基于距离的模型)
②梯度下降加速收敛,以二维特征为例,如果不做归一化,目标函数的等高线可能是个椭圆形,由于梯度下降的方向是垂直于等高线的方向,因此很可能走“之字形”路线
①序号编码(用于处理类别间有大小关系)
②独热编码(用于处理类别间不具有大小关系)
③二进制编码
决策树
过拟合
①过拟合本质上是模型的信息不足
②模型的信息包含两方面,训练数据中的信息与人们提供的先验信息
③最直接的办法是增加训练数据(可以优先添加分类超平面附近的样本点)
④否则就需要更多的先验信息
⑤先验信息可以作用在两方面,模型与数据
⑥模型方面包括简化模型、Dropout、缩小假设空间(L1/L2正则化)、bagging
⑦数据方面主要是数据扩充,对图像而言可以旋转、平移、添加噪声、颜色变换等,对表格数据曾做过基于KMeans的数据增强,Auto encoder、GAN也可以
①添加新特征,例如因子分解机、GBDT组合特征
②增加模型复杂度
③减小正则化系数
①样本不均衡时,占比大的类别成为影响准确率的最主要因素
②解决办法是使用平均准确率
①离群点会让RMSE指标变得很差
②可以在数据预处理阶段过滤掉噪声点
③如果不认为离群点是噪声点,就需要将离群点产生的机制建模进去,比如探究离群点产生的原因,添加相关的特征进模型里
④用平均绝对百分比误差MAPE
①当正负样本分布发生变化时,ROC基本保持不变
②因此ROC曲线能降低不同测试集的干扰,更客观地衡量模型本身的性能
③如果希望看到模型在特定数据集上的表现,用P-R曲线
①离线评估和用户调查都无法取代AB测试
②离线评估无法消除模型过拟合的影响
③离线评估不考虑环境延迟、数据丢失等情况
④离线评估关注准确度、覆盖率、多样性,用户调查关注用户满意度、新颖性、惊喜度,AB测试可以全面了解该推荐算法带来的用户点击率、留存时长等商业指标。
①Holdout,直接将数据分为训练集和测试集,但评估结果跟原始分组有很大关系
②k-fold交叉验证能减小样本集划分的影响,此外还有RepeatedKFold,但避免不了让训练集减小,这可能会影响模型的精度
③为了尽可能不让训练集减小,用留一法,但时间开销极大
④自助法,能维持训练集样本规模,也可用包外估计
①网格搜索,时间开销大,一般用广的搜索范围和大的步长,再逐渐缩小搜索范围和步长
②随机搜索,比网格搜索快,但没法保证结果
③贝叶斯优化算法,前面两个算法在测试一个新点时会忽略前一个点的信息,而贝叶斯优化算法对目标函数形状进行学习。首先给目标函数一个先验分布,每一次用新的采样点测试目标函数时都会更新这个先验分布。
①对线性可分的数据,通过硬间隔最大化,找到一个让几何间隔最大的超平面,让离超平面最近的点也有足够大的确信度将它们分开,这样的超平面对未知的新样本应有很好的分类能力
②构造的目标函数是二次函数,约束函数是仿射函数,因此SVM的凸优化问题是凸二次规划问题,可以用拉格朗日对偶求解
③对近似线性可分的数据,通过软间隔最大化,对每个样本点引入一个松弛变量,这种情况下最优化问题等价于带L2正则化的合页损失函数最小化
④对线性不可分的数据,用核函数将输入空间映射到高维特征空间,使数据在高维空间线性可分
⑤SVM的分类超平面只取决于支持向量
⑥SVR、NuSVC
①逻辑回归是分类算法,线性回归是回归算法
②逻辑回归得到的是因变量的期望,线性回归得到的是因变量的预测值
③逻辑回归可看作对对数几率 log p 1 − p \log\frac{p}{1-p} log1−pp的线性回归
④逻辑回归是GLM在因变量y服从伯努利分布的特殊情况,而对于用最小二乘法的线性回归,我们认为y服从正态分布
①二者都使用了极大似然估计(最小二乘法实际上是在 P ( y ∣ x , θ ) P(y|x,\theta) P(y∣x,θ)服从正态分布的假设下,对极大似然估计的化简)
②求超参数的过程中,都可以用梯度下降法
①信息增益、信息增益比、基尼指数
②ID3只能处理离散特征,C4.5和CART能处理连续特征(方法貌似相同?)
③ID3、C4.5只能用于分类任务,CART叫分类回归树,能用于回归任务
④ID3对缺失值敏感,C4.5和CART能处理缺失值
⑤ID3、C4.5每个特征在层级之间不会复用,CART每个特征可以重复使用
①预剪枝,能通过以下三个方法停止决策树的生长,树的深度、节点样本数、每次分裂对测试集的准确度提升,预剪枝的贪心本质有欠拟合的风险
②后剪枝,时间开销大,但通常可以得到泛化能力更强的决策树
③CART剪枝
①PCA旨在利用正交变换找到数据中的主成分,利用这些线性无关的主成分表征原始数据,从而达到降维的目的
②PCA假定数据的方差越大,其包含的信息越多,因此找到的主成分是与之前的主成分不相关的所有正交变换中方差最大的
③具体步骤是先对样本数据进行中心化处理,求样本协方差矩阵,再对协方差矩阵进行特征值分解,取前 r r r大特征值对应的特征向量,得到一个 m × r m\times r m×r的投影矩阵,将原始的 m m m维样本映射到 r r r维
④PCA的本质是奇异值分解,PCA求一个 m m m维到 r r r维的正交变换 P m × r P_{m\times r} Pm×r,让 A n × m P m × r = A ^ n × r A_{n\times m}P_{m\times r}=\hat{A}_{n\times r} An×mPm×r=A^n×r,再看奇异值分解 A n × m = U n × r Σ r × r V r × m T A_{n\times m}=U_{n\times r}\Sigma_{r\times r} V_{r\times m}^T An×m=Un×rΣr×rVr×mT,可以把式子变换为 A n × m V m × r = U n × r Σ r × r A_{n×m}V_{m×r}=U_{n×r}\Sigma_{r×r} An×mVm×r=Un×rΣr×r,可以看出 V m × r V_{m×r} Vm×r就是正交变换 P m × r P_{m×r} Pm×r
①LDA是为分类服务的,它的中心思想是最大化类间距离和最小化类内距离
②定义类间散度矩阵 S B S_B SB与类内散度矩阵 S ω S_\omega Sω,将目标函数写成类间距离与类内距离的比值
③令目标函数对投影向量 ω \omega ω求导等于零,发现目标函数可以转化为 S ω − 1 S B S_\omega^{-1}S_B Sω−1SB的特征值,投影方向就是最大特征值对应的特征向量
④LDA一般用于降维,但也可以作为分类算法,它假设各类数据来自于多个均值不同、协方差相同的高斯分布,LDA对这些高斯分布的参数进行估计,返回新样本属于每个高斯分布的概率
①它们的降维目标不同,PCA选择的是投影后数据方差最大的方向,由于它是无监督的,因此假设方差越大,信息量越多,而LDA选择的是投影后类间方差大、类内方差小的方向
②因此,对无监督的任务使用PCA降维,对有监督的则用LDA
①数据预处理,包括归一化、离群点处理
②随机取 K K K个簇中心
③定义损失函数,即每个样本点到簇中心的距离平方和
④开始迭代,E步求解隐变量,修改每个样本的簇分类使损失函数最小,具体的说就是把每个样本分到距离最近的簇中心
⑤M步求解参数,修改每个簇的中心使损失函数最小,根据损失函数的定义可以推导出每个簇的最优中心就是簇内所有样本点的均值
①KMeans的计算复杂度是 O ( N K t ) O(NKt) O(NKt),对大数据集来说是高效的
②一般情况下局部最优已经可以满足聚类需求
①会受初值和离群点的影响,每次结果不稳定
②通常是局部最优
③需要人工确定 K K K值
④样本点只能被划分到单一的簇中
⑤无法解决数据簇分布差别比较大的情况
①数据归一化和离群点处理
②合理选择 K K K值,可以用手肘法、Gap Statistic
③KMeans++
④核函数
①GMM是一种无监督学习方法,假设数据是从多个高斯分布中生成出来的,每个高斯分布 μ i μ_i μi与 Σ i \Sigma_i Σi都是待估计的参数,此外每个高斯分布还有一个参数 π i \pi_i πi,可看作权重
②通常用极大似然估计来求解,但由于有隐变量,目标函数是和的对数,难以展开求偏导,因此使用迭代的EM算法
③E步根据当前的参数计算每个点由某个高斯分布生成的概率
④M步用E步估计出的概率,改进每个高斯分布的均值、方差、权重
①最简单的计算平方误差和 Σ i Σ x ∈ C i ∣ ∣ x − C i ∣ ∣ 2 \Sigma_i\Sigma_{x∈C_i}||x-C_i||^2 ΣiΣx∈Ci∣∣x−Ci∣∣2
②与将数据集D看作单一簇相比,计算聚类的差异度 Σ D ∣ ∣ x − c ∣ ∣ 2 − Σ i Σ x ∈ C i ∣ ∣ x − C i ∣ ∣ 2 ) ∑ D ∣ ∣ x − c ∣ ∣ 2 \frac{\Sigma_D||x-c||^2 -\Sigma_i\Sigma_{x∈C_i}||x-C_i||^2 )}{∑_D||x-c||^2} ∑D∣∣x−c∣∣2ΣD∣∣x−c∣∣2−ΣiΣx∈Ci∣∣x−Ci∣∣2)
①生成式模型对联合概率分布 P ( X , Y , Z ) P(X,Y,Z) P(X,Y,Z)进行建模,再计算
P ( Y │ X ) = P ( X , Y ) P ( X ) = ∑ Z P ( X , Y , Z ) ∑ Y , Z P ( X , Y , Z ) P(Y│X)=\frac{P(X,Y)}{P(X)}=\frac{∑_ZP(X,Y,Z)}{∑_{Y,Z}P(X,Y,Z)} P(Y│X)=P(X)P(X,Y)=∑Y,ZP(X,Y,Z)∑ZP(X,Y,Z)②判别式模型只能用于无隐变量 Z Z Z的情况,直接对 P ( Y ∣ X ) P(Y|X) P(Y∣X)进行建模
③生成式模型有朴素贝叶斯、隐马尔科夫、pLSA、LDA
④判别式模型有kNN、感知机、决策树、LR、最大熵、SVM、boosting、CRF
①冷启动问题分为用户冷启动、物品冷启动和系统冷启动
②用户冷启动:
A.最简单的是提供非个性化推荐,例如热门排行榜,等搜集到一定的用户数据后再切换成个性化推荐;
B.利用用户注册时搜集的年龄、性别、兴趣等信息做粗粒度的个性化推荐,可以计算每种特征f对各个物品i的喜好程度 p ( f , i ) = ∣ N ( i ) ∩ U ( f ) ∣ ∣ N ( i ) ∣ + α p(f,i)=\frac{|N(i)∩U(f)|}{|N(i)|+α} p(f,i)=∣N(i)∣+α∣N(i)∩U(f)∣;
C.如果用户是通过社交网络账号登录的,可以导入用户好友信息,推荐好友喜欢的物品;
D.由于ItemCF维持的是一张物品相似度矩阵,因此对用户冷启动不敏感,可以使用基于物品的推荐算法,但首先得解决第一推动力的问题,可以在新用户第一次访问时给用户提供一些物品,让用户反馈他们对这些物品的兴趣,这要求这些物品比较热门、区分度高、具有多样性
③物品冷启动:
由于UserCF维持的是一张用户相似度矩阵,因此对物品冷启动不敏感,可以使用基于用户的推荐算法,但首先得解决第一推动力的问题,可以利用新物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户,再通过UserCF推荐给更多用户
④系统冷启动:
可以先解决物品冷启动问题,再解决用户冷启动,可以引入专家知识,人工给一定的样本在各个维度的特征进行标注,然后用NLP和机器学习技术,对其他物品(尤其是新物品)进行标记,快速构建物品相似度矩阵
①凸优化问题是指约束条件是凸集且目标函数是凸函数的优化问题
②LR是凸优化问题,因为交叉熵损失函数是凸函数
③主成分分析是非凸优化问题,因为 L ( V ) = ∣ ∣ X − V T V X ∣ ∣ F 2 L(V)=||X-V^T VX||_F^2 L(V)=∣∣X−VTVX∣∣F2是非凸函数,但可以借助SVD直接得到全局据小值
①经典的优化算法可以分为直接法和迭代法
②直接法要求目标函数是凸函数且有闭式解,例如岭回归 L ( θ ) = ∣ ∣ X θ − y ∣ ∣ 2 2 + λ ∣ ∣ θ ∣ ∣ 2 2 L(θ)=||Xθ-y||_2^2+λ||θ||_2^2 L(θ)=∣∣Xθ−y∣∣22+λ∣∣θ∣∣22
③迭代法分为一阶法和二阶法
①经典梯度下降法每次对参数进行更新时,需要遍历所有的训练数据,这要很大的计算量
②使用SGD,用单个样本的损失来近似平均损失,大大加快收敛速率,也适合数据源源不断到来的在线更新场景
①SGD对梯度的估计常出现偏差,造成目标函数曲线收敛很不稳定,且无法利用高度优化的矩阵运算操作,可以使用Mini-Batch GD
②Mini-Batch GD使用部分数据集进行梯度下降,因此可以用矩阵运算进行加速,梯度也会更准确,在Mini-Batch GD中,为了避免数据的特定顺序带来的影响,在每次遍历训练数据前对所有数据进行随机排序,然后每次迭代时按顺序挑选m个数据直至遍历完所有数据
③此外SGD在山谷和鞍点两类地形表现不好,容易在山谷两壁间来回反弹,在鞍点停滞下来,对此的改进包括Momentum、AdaGrad、RMSProp、Adam等方法
④Momentum以指数加权平均后的梯度 m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t=β_1m_{t-1}+(1-β_1)g_t mt=β1mt−1+(1−β1)gt代替原本梯度,将惯性考虑进去;AdaGrad对更新频率高的维度进行梯度抑制,它用“历史梯度平方和”衡量不同维度的梯度更新频率,将梯度表示为 g ( t , i ) ∑ k = 0 t g ( k , i ) 2 + ϵ \frac{g_(t,i)}{\sqrt{∑_{k=0}^tg_(k,i)^2 +ϵ}} ∑k=0tg(k,i)2+ϵg(t,i);AdaGrad以分母中求和的形式实现了退火过程,但学习率会下降得很快,为了解决这个问题,RMSProp将梯度的平方进行指数加权平均 v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t=β_2 v_{t-1}+(1-β_2)g_t^2 vt=β2vt−1+(1−β2)gt2;Adam是Momentum与RMSProp的结合
①解空间形状:L1正则项约束的解空间是多边形,L2正则项约束的解空间是圆形,多边形的解空间更容易在尖角处与目标函数的等高线碰撞,产生稀疏解
②函数叠加:L1正则化的目标函数为 L ( ω ) + C ∣ ω ∣ L(ω)+C|ω| L(ω)+C∣ω∣,当 ω < 0 \omega<0 ω<0时,其导数为 L ′ ( ω ) − C L'(\omega)-C L′(ω)−C,当 ω > 0 \omega>0 ω>0时,导数为 L ′ ( ω ) + C L'(ω)+C L′(ω)+C,因此有一定概率目标函数最小值出现在0处
③参数先验:L1相当于对参数引入拉普拉斯先验,L2相当于对参数引入高斯先验,因为MAP公式为 θ = arg max [ ∏ i P ( Y i , θ │ X i ) ] = arg max [ ∏ i P ( Y i │ X i , θ ) P ( θ ) ] θ=\argmax[\prod_iP(Y_i,θ│X_i )]=\argmax[\prod_iP(Y_i│X_i,θ) P(θ)] θ=argmax[∏iP(Yi,θ│Xi)]=argmax[∏iP(Yi│Xi,θ)P(θ)],前面代表MLE(误差视为高斯分布时,等价于平方损失函数最小化),后面代表参数先验,取对数可推导出正则化项
①采样本质上是对随机现象的模拟,有信息降维的作用,例如训练模型时想要优化的是期望风险,但总体分布可能包含无穷多个样本,因此一般用训练集上的经验风险作为训练目标,再在测试集上验证
②样本不均衡时的欠采样、过采样
③自助采样,充分利用已有数据集,挖掘更多信息
①逆变换采样法,如果目标分布 p ( x ) p(x) p(x)中不好采样 x x x,可以构造一个变换 u = φ ( x ) u=φ(x) u=φ(x),使得在 p ( u ) p(u) p(u)中采样 u u u比较容易,然后通过反函数 x = φ − 1 ( u ) x=φ^{-1} (u) x=φ−1(u)来间接得到 x x x
②拒绝采样,对目标分布 p ( x ) p(x) p(x),选取一个容易采样的参考分布 q ( x ) q(x) q(x),使 M q ( x ) Mq(x) Mq(x)的概率密度曲线能包络住 p ( x ) p(x) p(x),对 M q ( x ) Mq(x) Mq(x)进行采样后,再按采出来 x x x对应的 p ( x ) M q ( x ) \frac{p(x)}{Mq(x)} Mq(x)p(x)概率随机接受/拒绝;如果目标分布是凹函数时,可以用自适应拒绝采样,用分段线性函数来覆盖目标分布
③重要性采样
④如果是高维空间的随机变量,拒绝采样和重要性采样难以找到合适的参考分布,可以考虑MCMC采样,包括M-H采样和Gibbs采样
①MCMC采样包括蒙特卡洛方法和马尔可夫链,蒙特卡洛方法是一种通过采样进行数值型近似求解的方法,而马尔可夫链则用于采样
②基本思想是,构造一个非周期马尔可夫链,使它的平稳分布就是目标分布,然后从任意一个初始状态出发沿着马尔可夫链进行状态转移,最终得到的样本会收敛到目标分布
③问题的关键在于给定一个目标分布 π ( i ) π(i) π(i),如何找到状态转移矩阵 P P P,这需要用到马尔可夫链的细致平稳条件 π ( i ) P ( i , j ) = π ( j ) P ( j , i ) π(i)P(i,j)=π(j)P(j,i) π(i)P(i,j)=π(j)P(j,i),我们随机找一个转移矩阵 Q Q Q,在细致平稳条件等式的左右两边都引入一个接受率 α α α,使细致平稳条件 π ( i ) Q ( i , j ) α ( i , j ) = π ( j ) Q ( j , i ) α ( j , i ) π(i)Q(i,j)α(i,j)=π(j)Q(j,i)α(j,i) π(i)Q(i,j)α(i,j)=π(j)Q(j,i)α(j,i)成立,我们只需要从原始状态开始,通过转移矩阵 Q Q Q进行转移,每一步以接受率 α α α的概率接受转移,这便是MCMC采样的原始形式
④原始MCMC采样的接受率可能很小,考虑到细致平稳条件等式左右两边的接受率 α α α是可以同时增大相同倍数的,因此选定一个增大倍数,使等式两边的其中一个较大的接受率增大到1,这样能最大化提高接受率,这便是M-H采样
⑤更先进的Gibbs采样能接受所有采出来的样本,Gibbs考虑仅在一个维度上坐标不同的两个点 A ( x 1 ( 1 ) , x 2 , ⋯ , x m ) A(x_1^{(1)},x_2,\cdots,x_m) A(x1(1),x2,⋯,xm)与 B ( x 1 ( 2 ) , x 2 , ⋯ , x m ) B(x_1^{(2)},x_2,\cdots,x_m) B(x1(2),x2,⋯,xm),如果在平稳分布 π ( x 1 , x 2 , ⋯ , x m ) π(x_1,x_2,⋯,x_m) π(x1,x2,⋯,xm)上固定数值相同的 m − 1 m-1 m−1个维度作为条件,对剩下一个维度计算条件概率分布 π ( x 1 ∣ x 2 , ⋯ , x m ) π(x_1|x_2,⋯,x_m) π(x1∣x2,⋯,xm),那么将这个条件概率分布作为转移矩阵,可以使得 A , B A,B A,B两点的细致平稳条件 π ( A ) π ( x 1 ( 2 ) ∣ x 2 , ⋯ , x m ) = π ( B ) π ( x 1 ( 1 ) ∣ x 2 , ⋯ , x m ) π(A)\pi(x_1^{(2)}|x_2,\cdots,x_m)=\pi(B)π(x_1^{(1)}|x_2,⋯,x_m ) π(A)π(x1(2)∣x2,⋯,xm)=π(B)π(x1(1)∣x2,⋯,xm)成立,这样我们只需要每次固定 m − 1 m-1 m−1个维度,对剩下一个维度用条件概率进行状态转移,遍历完所有的 m m m个维度,就得到了新采的样本点,所以多维Gibbs采样一般采用轮换坐标轴的方式进行采样
①Sigmoid和Tanh需要计算指数,ReLU只需要一个阈值便可得到激活值
②ReLU提供了相对宽的激活边界,可以解决梯度消失的问题
③ReLU可以获得一个较低的激活率,提供了网络的稀疏表达能力
④ReLU的局限性在于会导致神经元死亡的问题,尤其是在学习率较大的情况下,极端情况下所有样本在一个节点全部输出负值,反向传播时梯度为0,则该处权重不会得到更新
⑤为了解决这一问题,便有了LReLU,它即实现了单测抑制,又保留了部分负梯度信息,此外还有PReLU,它将负轴斜率 α α α作为一个可学习的参数进行训练
⑥ReLU还有偏移现象,即输出均值恒大于零
①Dropout是指在神经网络训练中以一定的概率随机的临时丢弃一部分神经元节点,它给神经元一个p的概率被保留,相当于神经元到下一层的每个权值都施加一个Bernoulli分布
②Dropout可看作一种轻量级的Bagging集成,对于包含 N N N个神经元的网络,Dropout可看作 2 N 2^N 2N个模型的集成,它们共享部分权值,这大大简化了运算
③Dropout强迫一个神经元和随机挑选出来的其他神经元共同工作,避免这个神经元太依赖局部特征,减弱了神经元之间的联合适应性
①神经网络训练中会发生Internel Covariate Shift的问题,即一方面低层网络参数发生微弱变化时,这些微弱变化会随着网络层数的加深而被放大,另一方面参数的变化使得每一层的输入分布发生变化,上层网络需要适应这些分布变化
②Internel Covariate Shift会导致两个问题,上层网络不断适应输入数据分布的变化,这不符合IID假设,会使学习速度降低,另一方面如果采用饱和激活函数(Sigmoid、Tanh),网络训练容易陷入梯度饱和区,减缓网络收敛速度
③解决方案是Batch Normalization,它针对每一批数据,在网络的每一层输入之前增加归一化处理,将所有批数据强制在统一的数据分布下,但这一操作相当于把非线性激活函数变为线性的,会降低模型的拟合能力,因此最后要引入尺度缩放和偏移操作,补偿网络的非线性表达能力
①CNN与全连接网络的不同点在于稀疏交互和权值共享
②全连接网络每层神经元节点都与前一层所有神经元有连接,而稀疏交互指的是每层神经元节点只跟前一层局部区域范围内的神经元存在连接权重,它能使训练过程的时间复杂度减小几个数量级,也能改善过拟合问题,它的物理意义是先学习局部特征,再将局部特征组合起来形成更复杂、抽象的特征
③权值共享指的是卷积核中的每一个元素都会作用于每一次局部输入的特定位置上,因此只需要学习一组参数集合,而不用对每个位置的每个参数都进行优化,这大大降低了模型的存储需求,它的物理意义是卷积层具有平移等变性,例如一只猫无论出现在图像中的任何位置都应该被识别成猫
①随着网络深度的增加会出现一种退化问题,也就是层数更深的神经网络反而会有更大的训练误差,这很大程度上要归结于梯度消失问题,因为深度神经网络会涉及到非常多的参数和导数连乘,梯度很容易消失或者膨胀
②ResNet的思想是假设神经网络存在一个最优的网络层次,那么深层网络往往有很多层是冗余的,我们希望这些冗余层能完成恒等映射,保证冗余层的输入和输出完全相同
③ResNet将原网络的几层改造成一个残差块,把残差块的输入短接到残差块的输出层,这样中间的网络层只需要拟合输入和目标输出之间的残差,如果前面的输入已经很好的拟合了期望结果,那么中间的网络层相当于学习了一个恒等映射
①RNN的思想是利用顺序信息,在传统的全连接神经网络中,我们假设所有输入输出之间是相互独立的,而RNN针对序列中的每一个元素都执行相同的操作,每一个操作都依赖于之前的计算结果
②跟全连接神经网络相比,RNN能处理变长、有序的输入序列,此外它也有权值共享的作用
①RNN计算自变量参数 ω x ω_x ωx与前一层输入参数 ω s ω_s ωs时,损失函数对 ω x ω_x ωx与 ω s ω_s ωs求导会得到多个隐层之间的导数连乘
δ L t δ ω x = Σ k = 0 t δ L t δ O t δ O t δ S t ( ∏ j = k + 1 t δ S j δ S ( j − 1 ) ) δ S k δ ω x \frac{δL_t}{δω_x}=\Sigma_{k=0}^t\frac{δL_t}{δO_t}\frac{δO_t}{δS_t }(\prod_{j=k+1}^t\frac{δS_j}{δS_(j-1)})\frac{δS_k}{δω_x} δωxδLt=Σk=0tδOtδLtδStδOt(j=k+1∏tδS(j−1)δSj)δωxδSk δ L t δ ω s = Σ k = 0 t δ L t δ O t δ O t δ S t ( ∏ j = k + 1 t δ S j δ S ( j − 1 ) ) δ S k δ ω s \frac{δL_t}{δω_s}=\Sigma_{k=0}^t\frac{δL_t}{δO_t}\frac{δO_t}{δS_t }(\prod_{j=k+1}^t\frac{δS_j}{δS_(j-1)})\frac{δS_k}{δω_s} δωsδLt=Σk=0tδOtδLtδStδOt(j=k+1∏tδS(j−1)δSj)δωsδSk由于 S j = t a n h ( ω x x j + ω s s j − 1 + b 1 ) S_j=tanh(ω_xx_j+ω_ss_{j-1}+b_1) Sj=tanh(ωxxj+ωssj−1+b1),因此导数连乘 ∏ j = k + 1 t δ S j δ S ( j − 1 ) = ∏ j = k + 1 t t a n h ′ ω s \prod_{j=k+1}^t\frac{δS_j}{δS_(j-1)}=\prod_{j=k+1}^ttanh'ω_s ∏j=k+1tδS(j−1)δSj=∏j=k+1ttanh′ωs, t a n h ′ tanh' tanh′总是小于1的,如果 ω s ω_s ωs较小会导致梯度消失,如果 ω s ω_s ωs较大会导致梯度爆炸
②LSTM防止梯度消失和爆炸的关键在遗忘门,相比于RNN,LSTM的状态表达式为 S j = t a n h [ σ ( ω i x j + u i h j − 1 + b i ) t a n h ( ω c x j + u c h j − 1 ) + σ ( ω f x j + u f h j − 1 + b f ) S j − 1 ] S_j=tanh[σ(ω_ix_j+u_ih_{j-1}+b_i )tanh(ω_cx_j+u_ch_{j-1})+σ(ω_fx_j+u_fh_{j-1}+b_f)S_{j-1}] Sj=tanh[σ(ωixj+uihj−1+bi)tanh(ωcxj+uchj−1)+σ(ωfxj+ufhj−1+bf)Sj−1],因此导数连乘 ∏ j = k + 1 t δ S j δ S ( j − 1 ) = ∏ j = k + 1 t t a n h ′ σ ( ω f x j + u f h j − 1 + b f ) \prod_{j=k+1}^t\frac{δS_j}{δS_(j-1)}=\prod_{j=k+1}^ttanh' σ(ω_f x_j+u_f h_{j-1}+b_f ) ∏j=k+1tδS(j−1)δSj=∏j=k+1ttanh′σ(ωfxj+ufhj−1+bf),所以 δ S j δ S j − 1 \frac{δS_j}{δS_{j-1}} δSj−1δSj要么接近0要么接近1
①决策树不需要对数据进行特殊的预处理
②决策树的构造决定了,决策树能发现特征间的高阶关系,也有较好的解释性
③决策树的表达能力、泛化能力可以通过调节树的层数做折中
④样本扰动对决策树的影响较大,是不稳定模型
⑤决策树对缺失值不敏感
⑥决策树可以方便的将样本权重整合到训练过程中,不需要过采样
①预测阶段,树与树之间可并行化计算
②在分布稠密的数据集上,泛化能力和表达能力都很好
③树模型的优点,参考44
①在高维稀疏数据集上,表现不如SVM、神经网络
②只适合处理数值特征
③树与树之间只能串行训练
①GBDT是机器学习算法,XGBoost是该算法的工程实现
②GBDT只用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,同时使用一阶、二阶导数
③XGBoost显式地加入了正则项,通过alpha、lambda参数控制
④XGBoost支持多种类型的基分类器,booster参数可以选择gbtree、dart或gblinear
⑤XGBoost采用了与随机森林相似的策略,支持列采样(colsample_bytree),此外XGBoost对每层也可以用列采样(colsample_bylevel)
⑥XGBoost能自动学习出缺失数据的分裂方向
⑦XGBoost通过预排序,在节点分裂时并行计算各个特征的增益,寻找最优切分点
⑧XGBoost除了用贪心法枚举所有可能的切分点,还提出了一种分布式加权直方图算法,将特征值形成若干个bucket,只将bucket边界上的特征值作为候选切分点,可以将tree_method设为exact以使用原始的贪心算法,设为hist以使用直方图算法,用max_bin控制连续特征离散化后的直方图数目
①先调学习率eta,但同时需要增加num_boost_round,这个可以用xgb.cv()函数进行,作出训练、测试误差下降曲线图
②控制模型复杂度,包括max_depth、min_child_weight,这两个参数对模型的影响极大
③调整最小损失下降的阈值,gamma
④行采样、列采样,subsample、colsample_bytree、colsample_bylevel
⑤L1、L2正则化参数,alpha、lambda
⑥早停,early_stopping_rounds