Giter Club home page Giter Club logo

myleetcoderecords's People

Contributors

arbalest339 avatar

Watchers

 avatar

myleetcoderecords's Issues

后端相关

  • Spring-boot
    • [ ]
  • Hadoop
    • HDFS
    • MapReduce
    • Hbase
  • Nosql
    • Neo4j
    • Redis
    • Elastic Search
      • 采集器
      • filebite
      • kibina
      • kafka
      • ES是现在主流的日志检索工具
      • flink做分类做多链路
  • Vue
    • Vue生存周期
    • Vue特性
    • Webpackage

八股文

  • 激活函数

    • relu: max(0,x) leaky: λx (x<=0)。求导线性,不会有梯度爆炸/消失
    • sigmoid:1/(1+e^-x) 。求导等于sig(x)*(1-sig(x)) 0位置梯度消失
    • tanh: (e^x-e^-x)/(e^x+e^-x)。求导为 1-tanh^2(x), 在0附近线性
    • softmax: e^yi/∑e^yc 斜率逐渐增加,x轴上的差距可能造成y上更大的差距,将输出值拉开距离;但当x数值过大时可能出现函数值特别小
      • softmax 函数可能出现上溢出和下溢出,即y是很大的正值或很小的赋值时,会出现分子正无穷或分母接近0
      • 可以对所有的数值减去其中的最大值,这样所有的数就变成了负数,解决上溢出问题
      • 此时可以采用logsoftmax,即softmax后取对数,把除法变成减法,即使分母很小也不至于出现除0
  • 梯度消失与梯度爆炸

    • 激活函数的输入过大或过小,使得激活函数的梯度到了过小或过大的区域,造成梯度消失/爆炸
    • 模型过深,导致小于0的梯度连乘都容易造成梯度消失/爆炸
    • 好的参数初始化方式,如He初始化,避免参数过大/过小
    • 换用Relu、LeakyRelu、Elu等非饱和激活函数,其梯度不随x变化
    • 批量规范化(Batch Normalization),强行将输入拉到均值为0方差为1的部分,避免进入激活函数危险区域
    • 梯度剪切、正则,前者设置梯度最大阈值,后者进行权重正则化,给梯度乘以权重避免其过大
    • LSTM通过门控开合减少梯度传播的影响
    • ResNet,前面层的输出短路加到很后面层的输入上,短路项减少模型深度带来的连乘
  • 优化方法

    • 梯度下降: 某一函数在该点处的方向导数沿着该方向取得最大值,为当前batch计算梯度,往梯度的方向按学习率下降
    • 指数加权平均: V_t = βV_(t-1) + (1-β)θ_t,之前时间步的状态影响越来越小
    • momentum: 引入动量概念,当前的动量是上一动量和当前梯度的线性加权(即加权平均),动量代替梯度
    • AdaGrad: 参数的学习率自调整,每个参数反比于其所有梯度历史平均值总和的平方根,训练时存在lr一直下降的情况
    • Adadelta: 前t次的梯度平方的加权均值再开放,只累积过去w窗口大小的梯度
    • RMSprop: 在adadelta的基础上,前面的梯度的平方和再开方(不再有权重),即均方根,证明对RNN有效
    • Adam: 结合adadelta和momentum,学习率为一阶梯度线性加权平均项(动量)除以二阶梯度线性加权平均的开方
    • RMSprop,Adadelta和Adam表现的相当鲁棒
      image
  • 退火方法

    • lamda退火:每次调用时执行:new_lr = λ * init_lr。 λ由自定义函数指定
    • step退火: 经过一定数量step后执行:new_lr = init_lr * γ^(epoch//step_size)
    • multistep退火:每次遇到里程碑的step后执行
    • 余弦退火:让lr随着epoch的变化图类似于cosine函数new_lr=eta_min+(init_lr−eta_min)×(1+cos(epoch/T_max * π)),etamin是最小学习率,T_max是cosine周期的1/4
    • ReduceLROnPlateau:new_lr=λ*old_lr
  • SVM
    VM: 超平面分割二分类数据
    loss = -∑ y*(w*x+b) x为误分类点
    随机梯度下降,对w,b求偏导随机选取一个误分类点让w,b移动,直到loss为0
    SVM: 对线性可分的数据集,间隔最大化学习最优间隔超平面
    支持向量:距离超平面最近的向量
    SVM为什么要求对偶问题的解?因为对偶问题相对简单,引入核函数将其推广到非线性问题
    LR是参数模型,SVM为非参数模型。LR采用的损失函数为logisticalloss,而SVM采用的是hingeloss。在学习分类器的时候,SVM只考虑与分类最相关的少数支持向量点。LR的模型相对简单,在进行大规模线性分类时比较方便。

  • 聚类算法

    • K-means: 选取k个初始质心(作为初始cluster); 对每个样本点,计算得到距其最近的质心,将其类别标为该质心所对应的cluster; 重新计算k个cluser对应的质心,直到质心不再发生变化
    • k-means是局部最优的,容易受到初始质心的影响; k的大小也会影响效果
    • DBSCAN: 基于高密度连通区域的、基于密度的聚类算法
    • 对待聚类集合中每个点p(i)都计算k-距离,最后得到所有点的k-距离集合E={e(1), e(2), …, e(n)}
    • 对集合E进行升序排序后得到k-距离集合E’,拟合一条排序后的E’集合中k-距离的变化曲线图.将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值
    • 以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点
  • 决策树

    • 普通ID3: 用计算出的信息增益最大的特征来建立决策树的当前节点,输入特征A的信息增益为样本D的熵-输入A成立下的熵。如果Ag的信息增益小于阈值ϵ,则返回单节点树T,标记类别为样本中输出类别D实例数最多的类别。否则,按特征Ag的不同取值Agi将对应的样本输出D分成不同的类别Di。每个类别产生一个子节点。对应特征值为Agi。
    • ID3的问题: 不能解决连续值,取值多的特征增益多,不能解决缺失值,不能应对过拟合
    • C4.5: (1)连续的特征离散化,取相邻两样本值的中位数。如果当前节点为连续属性,则该属性后面还可以参与子节点的产生选择过程。(2) 引入一个信息增益比的变量IR(X,Y),它是信息增益和特征熵的比值。特征取值越多特征熵越多
    • C4.5的问题: 剪枝不够优化,多叉树效率低
    • CART算法: 基尼系数代替信息增益,划分连续和C4.5相同,选择基尼系数最小的点作为该连续特征的二元离散分类点
    • CART回归树: 输出连续值,对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点
    • CART剪枝: 后剪枝法,第一步是从原始决策树生成各种剪枝效果的决策树,第二部是用交叉验证来检验剪枝后的预测能力,选择泛化预测能力最好的剪枝后的数作为最终的CART树。从叶子节点开始自下而上计算各内部节点t的训练误差损失函数(回归树为均方差,分类树为基尼系数)以及正则化阈值。取所有节点的最大阈值,自上而下的访问子树t的内部节点,如果剪枝的误差减去不剪枝的误差除以节点数小于阈值,则误差可接受,剪枝。
      image
  • 集成学习

    • AdaBoost: 组合训练若干个弱分类器,使之成为强分类器;每轮训练提高上一个分类器分类错误的样本权重;加权表决预测结果
    • GBDT回归: 弱学习器限定CART,用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树
    • GBDT分类:样本输出不是连续的值,无法直接拟合类别输出的误差。用类别的预测概率值和真实概率值的差来拟合损失。多元分类的误差是样本i对应类别l的真实概率和t-1轮预测概率的差值。
    • GBDT可以用加正则化项,子采样,CART回归树剪枝进行正则化
    • 随机森林: bagging采样为有放回采样,做T次随机采样。36.8%的数据可能没有采样,做测试集。分类用投票,回归用均值
    • RF用CART作为弱学习器,树的数目是超参数,树越少,方差越少,偏差越大。RF可并行,对特征缺失不敏感。容易过拟合
    • XGboost: 支持并行、分布式、核外计算、cache加速。t-1到t颗树时,对loss函数泰勒二阶展开,得到残差,残差最终是本树参数矩阵的二阶多项式,与上一状态无关
    • XGboost在计算节点分裂时,信息增益为分裂后的左右子树loss减去分裂前的loss,大于阈值就分裂。
    • XGboost需要遍历训练集很多次,对训练集大小有限制。它需要从全局考虑最优的分割点。
    • LightGBM: (1)使用histogram算法,将连续的特征分割为k个离散值,根据直方图进行不精确分割。(2)使用按叶子生长的策略,从叶子中找到分裂增益最大的,xg是按照层分裂,每次同时分裂一层叶子,可能有些叶子不需要分裂。(3)直接支持离散特征,节点一次判断多个类别,把直方图按每个类别的均值进行排序;然后按照均值的结果依次枚举最优分割点。
    • LightGBM的并行: 特征并行的主要**是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。
      image
  • HMM
    判别模型是直接对P(Y|X)或f(x)建模,关注对于特定输入,输出的准确性;生成模型对P(X, Y)建模,关注数据生成的方式
    初始状态矩阵+状态转移矩阵+给定状态下输出概率矩阵
    前向算法,根据前t个状态计算t+1状态,计算状态序列概率
    后向算法,根据后t个输出序列和当前状态计算t-1输出,计算输出序列概率

    • 维特比算法
      原理从t到结束的路径一定在局部也是最优的
      动态规划,初始为初始状态为每个i且输出对应观测值的概率
      之后 δ(i) 为从上一状态中找一个使得之前状态概率当前状态概率状态输出观测值概率
      同时另一矩阵保存所有上一状态为j转移到当前状态i的概率
      结束后以回溯的形式从另一矩阵寻找概率最大的上一个状态T-1T最优 -> T-2T最优 -> ....
  • 反过拟合

    • Early Stopping: 在验证集效果不再提升时停止
    • L2正则 增加一个惩罚项,让过于复杂的模型评分变低,L2正则为所有参数的平方和再开方
    • Dropout 随机将模型中的部分隐层参数置零,减少局部特征依赖
    • Batch Norm 对不同batch的同一列,BN能够解决梯度弥散,缓解梯度消失的状况。batchsize太小会降低BN效果
    • Layer Norm 每次只看一条数据,batchsize的大小不影响LN
  • TF-IDF: tf,字词的重要性随着它在文件中出现的次数成正比增加,idf,同时会随着它在语料库中出现的频率成反比下降
    image
    image

  • BM25: 检索算法,使用query中每个单词t与文d之间的相关性;单t与query之间的相似性;每个单词的权重

  • n-gram

  • word2vec:

    • CBOW: 输入前后窗口大小词语独热向量,学习一层隐层参数矩阵,根据前后窗口词预测本词概率。
    • skip gram: 输入本词语独热向量,学习一层隐层参数矩阵,输出参数矩阵维度的词向量,softmax产生位置i是单词j的概率,损失函数为极大化窗口内上下文序列的生成概率(取对数)。
    • 在word2vec中,对单词的预测可以使用霍夫曼数原理,在神经网络采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数
    • 训练同样可以使用Negative Sampling采样,我们得到neg个和w不同的中心词wi,i=1,2,..neg,这样context(w)和wi就组成了neg个并不真实存在的负例。利用这一个正例和neg个负例,我们进行二元逻辑回归,得到负采样对应每个词wi对应的模型参数θi,和每个词的词向量。训练时让正例概率最大化,负例最小化。
  • fasttext: 类CBOW的文本分类,用前后窗口序列预测标签,使用n-gram, 哈夫曼树,层次softmax

  • Glove: 引入word-word的共现矩阵X, Xij是词语wi的上下文中wj出现的频次,训练让ik的向量点积与jk的点积符合ik,jk的出现概率

  • Attention

    • 在输入序列上引入注意权重α,以优先考虑存在相关信息的位置集,以生成下一个输出token
    • distinctive:候选和查询状态(query state)分别属于两个不同的输入和输出序列.co-attention:同时对多个输入序列进行操作
    • single-level:只为原始输入序列计算注意力权重. multi-level: 较低抽象级别的输出(内容向量)成为较高抽象级别的查询状态
    • soft attention:用输入序列所有隐藏状态的加权平均值来构建内容向量.hard attention:输入序列中随机抽样的隐藏状态计容向量
    • 注意力机制可以用来为这些不同的表示分配重要权重
    • 注意力机制允许我们直接检查深度学习体系结构的内部工作
  • self-att对自然语言处理的意义

    • 神经网络**依赖因素(co-dependent element)之间的路径长度会影响模型学习这些依赖关系的能力:路径越短,模型学习此类依赖关系就越容易
    • [ ]
  • 推荐算法:协同过滤

    • 基于物品协同过滤系统的相似性度量方法普遍使用余弦相似性,但无法应对稀疏问题
    • Jaccard方法完善了余弦相似性只考虑用户评分而忽略了其他信息量的弊端,特别适合于应用到稀疏度过高的数
  • 评测指标

    • ROC曲线的横坐标是伪阳性率,纵坐标是真阳性率,前者是真负例被判为阳性的概率,后者是真正例被判为阳性的概率
    • ROC曲线下方的面积即为AUC值,AUC为1表示全对,AUC为0.5表示基本和随机预测一样

项目相关

  • 人立方
    • 标注数据500篇,实体 个

    • 语料库4GB 实体约15万

    • 基于BERT的算法,存在问题:中美、东京 电力公司

    • 基于BERT的EL,先搜wiki,直接链接到的就链接,消歧页面转消歧。co-attention机制,S对Intro做att,再反过来,最后self-att。交叉熵损失 EL的性能 100% 95% 97.5% 实际使用时仅观测到少量假阴性预测
      image

    • 词内分词

    • 数据库设计

  • 复盘核工业
    • 第一阶段,算法实现,API调用,无实权,速度要求所以不用BERT
    • 训练数据标注偏差大,标注员忽视了的部分关系的标注,训练时效果不错,使用时出现大量错误
    • 措施:重采样,过采样,负样本加入,效果一般,其他办法(调节类型和样本的权重)
    • 通知甲方注意数据质量,但已无可挽回
    • 类型匹配,限定一些实体对之间只能出现特定的关系,修改部分近似关系类型
    • 第二阶段,完整系统,担任组织者,重新定义需求,完成算法的集成
    • 20天速成Vue,实现事件弹幕,实体球效果
  • 复盘比赛
    • 阿里安全+清华,辱骂文本对抗
    • 没有训练数据,收集,清洗
    • 构建BiLSTM目标模型,正确率不高但是能进行筛选,减少百度平台调用
    • 三级词表,第一级为确定是辱骂语料中被百度开发平台判定为辱骂的词,第二级是这些句子中其他被参考模型判定为辱骂的词,最后一级是所有语料的关键词抽取
    • 2,3级词表来源的语料很大程度上是本人筛选出的语料
    • 可能的改进: 用BERT构建,但意义不见得很大,因为单纯的分类只能用来进行筛选,必须要找到敏感词才能完成攻击
    • 冠军队伍的思路:敏锐地察觉到噪声才是AI最大的敌人
    • 研究评判标准,舍弃编辑距离,追求词向量余弦相似度,杰卡德相似度=向量每一维度上较小的数之和乘以较大的
    • 冠军改进,进一步优化编辑距离
  • Softmax分类器: 用交叉熵作为loss函数,用每个输出中最大的标签为结果。交叉熵=-∑pi*log(qi) q为模型概率,p为真概率
    image
  • CRF
    • 概率无向图模型,HHM为有向图,只能从状态i-1到i,CRF可以从任何一个状态到i
    • loss函数是发射概率+转移概率,即编码层输出真值的概率和条件随机场里真实路径的转移概率。规范化因子需要计算所有可能的路径。由真路径的概率除以所有路径概率的和,即真概率除以规范化因子。
    • 改进的迭代尺度法通过改变不断优化对数似然函数改变量的下界,达到极大化对数似然函数的目的
    • 动态规划维特比算法,当前步某状态的最大概率为上一步所有状态概率乘以转移到本状态的概率和 O(n*d^2)
  • CRF与HMM
    • CRF 是判别模型,对问题的条件概率分布建模,而 HMM 是生成模型,对联合概率分布建模
    • CRF 用函数来表示转移概率
    • HMM用极大似然估计来作为loss,CRF则是label序列的概率与全体可能路径的比值,规范因子使得它进行了全局的归一化
    • HMM模型中存在两个假设:一是输出观察值之间严格独立,二是状态的转移过程中当前状态只与前一状态有关。
    • CRF统计了全局概率,在做归一化时考虑了数据在全局的分布,而不是仅仅在局部归一化
  • LSTM
    • RNN当前步与上一步相关,无加权信息衰减
    • 序列越长前面时间步的梯度影响越少,梯度反向传播时对最前面的参数影响不大,并不擅长处理长期依赖效应
    • 如果激活函数的偏导比较小(小于1)或者为0,那么梯度随时间很容易消失
    • 遗忘门,控制上一状态对本状态的影响;输入门,控制本输入对本状态的影响;输出门,控制本状态对输出的影响
    • 当gate是关闭的,那么就会阻止对当前信息的改变,这样以前的依赖信息就会被学到。当gate是打开的时候,并不是完全替换之前的信息,而是在之前信息和现在信息之间做加权平均(候选状态是上一输出与当前输入的加权和)。所以,无论网络的深度有多深,输入序列有多长,只要gate是打开的,网络都会记住这些信息。
    • 连乘项的变化:通过控制bias比较大,使得该值接近于1

image

image

  • GRU
    • 合并遗忘、输入门,新隐层状态是更新门乘以上一状态连接本输入,新输出状态是上一输出与本状态在输出门的线性权值(1-z)o_t-1+z*ht

image

  • Transformer
    • 6层encoder每层两个子层,第一个子层是多头自注意力,第二个是带位置的全连接层
    • decoder同样6层,每一层前面再加一个带遮蔽的多头自注意力子层,遮蔽在Q*K之后,softmax之前
    • Attention: Q是decoder的变换,K,V是encoder的,att = F(Q,K)*V
    • self-attention: QKV分别是输入乘以一个对应的线性变换矩阵,单头自注意力层scaled-dot Product softmax(QK/(d_k)**0.5)V
    • multi-head: 多头部注意使得模型能够在不同的头共同关注来自不同表示子空间的信息。另解,将巨大的参数矩阵分为12头,减少参数随特征数的增加速度。
    • 除d_k的原因:维度变大的时候点积的增长过快,可能会让softmax的梯度推到很小的区域
      image
  • BERT
    • 模型: BERT使用的是TRM的encoder,12层768个12头注意力,[CLS]和[SEP]特殊符号
    • MLM: 随机mask或替换15%的词语,预测被替换的词语,其中80%mask,10%随即替换,10%不变
    • MLM的缺点:引入了不存在的[MASK], mask以piece为单位,有时会隐去完整意思的一半
    • NSP:在n个下一句中选择真的下一句,一半概率为真下一句,一半概率随即替换。NSP是对真实任务有帮助的
    • 2-5层表征,6-9层语法,6层以上语义
  • 其他预训练语言模型
    • GPT 通过trm解码层构建且只保留了 Mask Multi-Head Attention,采用自回归机制,从左到右根据前面的预测后面的

    • Transformer XL: 引入了两点创新:循环机制(Recurrence Mechanism)获得长期依赖性和相对位置编码(Relative Positional Encoding)

      • 隐层接受上一层的输出和前面层的输出二者拼接起来做K,V
      • 计算Q*K时,K的位置编码不是绝对位置而是相对位置,是Pij而不是Pj
        image
        image
    • BERT-WWM(whole word mask) 用mask词语、短语级来代替mask word piece

    • ALBERT 轻量化BERT

      • 分解嵌入参数,将原本的emb(vobsizehidsize)分开为embedding矩阵(vobsizeembsize)和hidden矩阵(embsize*hidsize)
      • 在层之间共享TRM enc的参数,有助于稳定网络参数
      • 反对NSP,NSP包含了对句子话题和连贯性的预测,但是前者更容易,所以模型更倾向于用前者判断,改为句序预测
    • BART 针对文本生成(翻译)的改进

      • 训练任务:(1)5种方式加入随机噪声mask,删除(2)复原原句
      • 网络结构:BERT的编码加上GPT从左到右的解码
    • RoBerta 更大规模的BERT

      • 动态mask: 对相同的句子在不同的epoch中进行不同的mask
      • 舍弃NSP,证明了该部分几乎没有帮助,甚至有害
      • 用字节编码解决实际输入时出现未知词语的问题(将单词切做字母,然后统计字母组合的出现频率组成piece)
    • XLNet

      • 在长文本的阅读理解类的任务上提升更明显一些
      • 主流的nlp预训练模型包括两类 AR与AE,自回归的主要任务在于评估语料的概率分布,只考虑前面的词对当前词的概率。每个新单词产生后,该单词就被添加在之前生成的单词序列后面,这个序列会成为模型下一步的新输入。
      • 排列语言模型Permutation Language Model: 对句子序列完全重排列,词语的概率由每种排列中之前的词决定。在Transformer内部,通过Attention掩码,从X的输入单词里面,也就是Ti的上文和下文单词中,随机选择i-1个,放到Ti的上文位置中,把其它单词的输入通过Attention掩码隐藏掉。问题:每个词得到的依赖概率几乎一样。
      • 双流自注意力:content为正常TRM,全连接所有词,Query流隐藏单词自身以及之后的词,等于只保留位置
    • ERNIE1.0:词语级mask,短语级mask,实体级mask(知识),Dialogue Language Model 用对话代替NSP,贴吧中文数据集

    • ERNIE2.0:第一步我们通过大数据和先验知识来持续的构造无监督任务。第二步我们增量的通过 multi-task learning 来更新 ERNIE 模型。对词语、句法、语义级任务分别PT 参考

    • K-BERT

  • Torch 实现细节
    • Troch的并行化 DataParallel,net = torch.nn.DataParallel(model, device_ids=[0, 1, 2]),它将一个batch的输入划分成多个部分分配在多个设备中。双卡的时候模型本身似乎不会复制,两个卡上的数据以流水线的形式进行计算,先计算卡1的输出然后计算卡2,输出在卡1集中计算loss,loss在卡1加和,卡1计算梯度,梯度再进行反向传播,反向传播只在卡1的模型上进行。
    • Torch的底层使用 JIT (Just In Time) 即时编译器实现,JIT 包含一种名为 Torch Script 的语言,这种语言是 Python 的子语言,使用该语言可以讲torch代码序列化并支持C++ API的调用
  • 解决数据不均衡的常见办法

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.