学问思辨行: 记录生活学习和工作中的实践和思考,以期实现终身成长.
-
大家新年好
大家新年好,正月初一,给大家拜年了。 这几天deep seek开源了很有影响力的大模型产品,带来了很大的冲击,好的有影响力的技术的产生有一些偶然因素,但更多的是创新者的创新精神和长久持续的行业技术的积累和深度的思考,以及较为强大的驱动力。就像深度学习在2012年左右的突破,带来了长达10几年持续的技术和软硬件产业革新,同时也带动其他行业和学科的综合发展向前,人类不竭的探索精神,科学技术人文的不断发展,希望带给人类可以无限畅想的且可以逐渐变为现实的更加美好的未来。 刚才打开了一下博客,发现有一段时间没有更新了,今年打算继续不定期的写一些短文, 也希望通过记录对相关技术研发,产业应用思考和实践,不断提升技术技能,深化行业思考,落地产业应用。这些短文包括技术文章总结汇总,生活哲学感悟,以及平时的思考、自省和问题记录等等,希望能有合适的更新频率,一年下来也希望有一些文字积累,也是一年生活工作轨迹的记录,以便回顾复盘总结,更好的设计计划执行前行的路,等更久的以后也可以作为温馨的回忆来重温。 祝大家巳巳如意,幸福安康!
-
机器学习基础技术系列原理摘要总结
这篇短文对最近梳理的机器学习基础技术系列做一个摘要总结,以备后续复习和查阅,也希望能够对相关感兴趣的读者有所帮助,如有问题,欢迎读者联系作者勘误修订。感谢大家一直以来的关注和鼓励,后续将继续向大家分享计算机基础核心课程的知识技能和AI基础算法以及相关前言方向进展。 1、线性模型以及广义线性模型,如线性回归,逻辑回归,SoftmaxRegression等,都属于广义上的线性模型(广义线性模型形式上统一为指数分布的公式,上述分布实例都可以写成广义线性模型的公式表示),多项式回归也可以看成是经过了特征映射(feature mapping,类似于核方法)后的线性模型。线性模型基于统计概率的联合概率分布最大似然的原理去求解模型参数(线性模型得出用MSE损失函数,逻辑回归用SigmoidLoss,多分类用SoftmaxLoss,并根据loss可以求得梯度后采用梯度下降求解),优化的方法还有解析解(直接通过矩阵的计算得出参数解,在属性和参数量很大,样本量很大的场景下不适合),还可以基于牛顿法去求解,类似的原因,由于求解Hessian矩阵以及其逆矩阵的代价,牛顿法一般也限于参数量不大的时候去求解。 2、生成学习算法和判别学习算法,直接学习从属性x映射到目标y的函数及其参数学习到后验概率p(y|x)的学习算法称为判别学习算法;而通过概率建模学习条件概率p(x|y)(属性生成的过程特征)以及先验概率p(y)的算法,然后通过贝叶斯规则求解后验概率p(y|x)=argmax(y)p(x|y)p(y)的方法称为生成学习算法,其中GDA(Guassian Determinant Analysis)算法假设p(x|y)服从多元高斯分布,并通过对数似然函数最大化根据样本统计出相关分布的参数,如先验分布和条件分布的概率(如服从高斯分布则参数为均值向量和和协方差矩阵和先验概率)。GDA是比线性回归模型等更强的假设,其假设p(x|y)服从多元高斯分布,而线性回归模型中没有此要求。朴素贝叶斯算法是生成学习算法的一种特例应用,并根据邮件分类和收入预测进行了实际场景应用示例的算法具体化的实现和说明。 3、核方法,核方法是将数据属性通过feature map函数映射到高维空间从而提升算法performance但同时计算量没有显著增加的一种计算策略,有形如参数求解过程中在所有样本上计算<x(i),x(j)>这种内积形式的算法都可以采用核方法。常见的核函数有多项式核函数和高斯核函数(RBF),通过高斯核函数的指数形式的泰勒展开可得高斯核经数据原始属性映射到了无穷维,高斯核函数在可以用到核方法的算法中通常表现不错。 4、SVM,介绍了函数间隔和几何间隔的定义以及之间的关系,其中几何间隔有空间的几何意义是确定的,而函数间隔可以任意scaling因子有任意性。找出对所有样本分类置信度高的决策平面的问题转化为最小几何间隔最大化,这时的分类器又称为最优间隔分类器(The optimal margin classifier)。最后转化为基于线性不等式约束的二次函数优化问题。通过拉格朗日乘数子和朗格朗日对偶优化,在对偶问题中采用KKT条件实现快速优化算法SMO,该方法采用类似于coordinate ascent方法进行alpha参数的优化,由于alpha之间存在着约束,这时采用同时更新两个alpha进行。采用核函数的SVM算法,松弛变量处理在决策边界存在的线性不可分的样本点 5、统计学习理论,假设类(假设空间),根据统计概率的相关引理(1、多个事件至少发生一个的概率最多为每个事件发生的概率和,2、霍夫丁不等式,期望和统计均值之间的差距gamma和样本数量满足不等式关系,当n越来越大时,统计均值可以看成是期望的近似)。根据上述的引理,我们将经验风险最小化(训练误差),泛化误差(generalization error)分别看作为统计均值和期望并采用上述的霍夫丁不等式得出训练样本和两个误差间距的不等式关系(同时得出假设空间中假设函数个数k得出的训练误差最小化和泛化误差最小化的模型之间的关系中的bias和variance的平衡的形式化描述)。描述了假设类打散(shatter)样本数据集的定义,如果存在着样本标签的所有可能的分配,都能在假设类(假设空间)中找到一个假设函数,实现正确的预测,则称假设类打散数据集。VC维定义为假设类打散数据集的最大的样本数量。最小化经验风险和模型泛化误差的置信度关系,bias和variance的关系以及之间的tradeoff。 6、模型选择和验证,介绍了cross validation方法,k-fold cross validation算法性能验证策略。模型选择部分主要前向搜索和后向搜索以及基于互信息(KL散度的)属性重要性得分高低作为重要性进行排序。 7、结构分析(structure analysis,KMeans,DBSCAN,Hierarchical Clustering),KMeans的收敛和局部最小化,KMeans的K超参搜索方法,Kmeans在非凸集数据上表现不好的问题,基于密度的聚类算法,核心样本,边界样本和离群点,层次聚类的聚类时的依据,层次聚类从最细粒度的每个样本一个类别到最粗粒度的一个大簇的中间每一次聚合(两个簇合并)的结果都有展现,通过dendrogram树状图进行可视化展示,方便看到不同层次聚类的结果状态。 8、EM算法,在有隐变量的模型场合,隐变量没有在观测数据中体现,通过对含有隐变量的似然概率建模的情况下,并通过相关的等式(设计出每个样本基于隐变量的概率分布的表达式并进行相关的等式变换和)不等式(jesen不等式)变换去求解对数似然函数的下界,在下界成立时得出相关的条件即为E-step,下一步去最大化这个下界M-step,通过这两个步骤的不停迭代,最后求出包含隐变量的相关模型参数的解。 9、因素分析(Factor analysis)。通过少数的几个因素建模大量属性之间的关系,假设少数维度的隐向量满足高斯分布,通过仿射变换矩阵Lambda将隐变量映射到属性x的空间,通过学习这个仿射变换,x均值u,以及x的噪声协方差矩阵就可以通过z和模型参数构建属性x,而模型参数的学习方法主要是通过EM去迭代,这里主要用到了多维高斯分布以及对矩阵变量的求导方法;PCA: 将样本进行归一化(如z-score normalization之后,相当于平移到原点,不同维度按标准差缩放到差不多可比较的量纲)然后根据属性的协方差去进行特征值特征向量的计算,并将特征值排序后前面的k个向量作为主向量进行降维;ICA:独立成分分析,主要解决从混合后的信号重建原始信号的问题。 10、神经网络,介绍了多层感知机的前向推理和基于链式规则的后向传播算法(以及基于矩阵计算的实践实现) 11、树系列的相关算法,包括决策树(ID3,ID4.5,CART)以及决策树节点分裂的度量方法(信息增益,信息增益率,基尼系数,和方差等),集成学习方法(随机森林,AdaBoost,梯度提升树及其增强版XGBoost),随机森林基于Bagging的集成学习方法,采用Bootstrap有重复的放回采样方法,而且每个决策树都会选择属性的子集进行树的生成,随机森林的测试数据可以基于袋外数据进行;Adaboost为{-1,1}的二分类,基于指数损失函数,基于样本权重训练弱分类器,每个弱学习器也有对应的权重,其权重为其错误率的相关函数,同时每个样本的权重也在学习器的效果上逐步随之更新(分类错误的样本的权重更高,相当于分配更高的注意力);梯度提升树利用泰勒一节展开每一步回归前些步骤集成结果的残差,XGBoos采用二阶泰勒展开,利用二阶导数信息进行每个树的生成,其生成采用贪心算法,以及基于树的复杂度的正则化方法。 12、HMM为概率图模型的一个特殊应用实例,之前在语音识别中用到的比较多,模型参数为隐状态的初始概率,隐状态之间的转移概率矩阵A,隐状态到显示状态的B,隐马尔可夫模型的三个问题:1,基于模型参数和观测序列求得观测序列的概率;2,基于模型参数和观测序列解码出最可能的隐序列状态;3,根据观测序列X,求解模型参数的问题,基于EM算法的迭代过程,具体会使用到前向函数和后向函数等。 References
-
强化学习基础技术系列原理摘要总结
最近在制作强化学习方面的分享内容,这里做一个文字的摘要总结版本,可以方便关键知识的复习和记忆检索。也希望对相关方向感兴趣的读者有所帮助,同时引文的链接中有详细的视频内容分享,欢迎从事相关方向的读者朋友们多提意见和建议。 1、MDP,马尔可夫决策过程,是基于状态(state, observation)、行为(action)、状态行为转移概率矩阵(state transition probability, 可以定义为维度为3的多维数组,如第1个维度为当前状态,第2个维度为下一个状态,第3个维度为所有行为)以及即时奖励reward,和策略pi(policy),马尔可夫决策过程描述了一个随机过程控制的场景,有actor,agent,environment等,actor和environment进行交互,agent是actor背后的大脑,负责帮助actor进行决策。当马尔可夫决策过程中状态行为转移概率矩阵和即时reward已知的时候,我们可以采用bellman方程的动态规划迭代方法去采用策略迭代或价值迭代去求解最优决策。当模型状态未知时,也可以采用免模型的算法,如蒙特卡咯和时间差分的方法去求解。 2、当马尔可夫决策过程的状态未知时,我们一般采用免模型法,如基于蒙特卡洛的基于整个回合序列的统计近似方法,以及基于更小step的时间差分方法,如Sarsa和q learning都可以基于时间差分法去迭代优化Q函数,不同点在于Sarsa为on policy的方法,也就是同策略方法,而Q learning为异策略方法。同策略(on policy)可以理解为基于当前的同一个训练的网络去学习error(如Sarsa中下一个状态也会通过智能体执行当前策略行为获取相应的Q值),而异策略(off policy)可以理解为当前训练网络(训练网络)和基于之前的网络获取的动作价值函数的状态(目标网络)结合去学习error。 3、DQN网络算法,介绍了其目标网络和训练网络的异策略训练方法以及算法代码流程描述,并基于CartPole模拟器环境用MLP网络进行了DQN算法的实现,这里有基于队列实现的一个ReplayBuffer(经验回放池,基于双端队列数据结构实现),经验回放池的数据进行采样会随机抽取数据返回,保证训练时数据之间的独立性,易于网络的训练,不会使得网络过于拟合最近的采样数据(经验回放池的早期数据在池满被移除之前也可以复用多次),早期的数据将会自动从队列中移除也满足了采样数据的时效性。在实现过程中,训练网络用于采集收据放入ReplayBuffer,目标网络顾名思义用于计算训练网络所需要回归的目标,其基于回放池中取出的reward和nextstate,并将nextstate输入给目标网络并计算出最大的action的输出,经过公式计算得出训练网络需要回归的target。具体的相关代码实现可以参考引文3 4、PolicyGradient和actor-critic算法,基于Policy network的基于期望回报的最大化,根据蒙特卡洛采样方式将完整回合轨迹的累积回报与其概率进行加权,通过采集很多个轨迹得出回报的期望,并使期望最大化来优化策略网络。原始的公式中,是对整个轨迹的回报进行的期望的计算,整个轨迹中每一个时刻的状态行为分配相同的权重会存在一些不合理的因素,关于具体的推导过程可以参考视频分享,其中要说明的是基于蒙特卡洛的REINFORCEMENT算法中的公式通过一些列的考虑进行的调整,比如对于某个状态下的行为的“好坏”将考虑其从该状态下执行行为后的期望回报作为因子(之前发生的事情与执行这个动作没有关系,和-logp_theta(s|a)去相乘去算损失,如果期望回报较大,增大概率p_theta(s|a)会获得更大的回报,这是-logp_theta(s|a)为正值而且会随着p_theta(s|a)增大变小,所以总体的loss变小,达到我们期望回报增大的目的。在策略梯度算法中,为了减小回报的方差,引入了基线的概念,可以理解对回报做了归一化处理,使得训练的结果更加稳定(有的游戏中所有步骤的即时回报都是正值),而将价值函数作为基线的策略梯度的改进算法称为actor-critic算法。actor-critic算法为一种框架算法,后续的PPO以及TRPO都用到了策略网络和价值网络进行的联合的训练,也归属于这一类算法。 5、PPO算法,策略梯度是同策略算法,其采集的数据只能利用一次,采集数据的成本过高,为了能够更高效率复用数据,PPO算法采用了异策略的方案,提供了训练网络和参考网络,并且对参考网络上采集的数据进行了多次复用,为了限制训练网络和参考网络的参数差异不要太大(能更好利用重要性采样进行数据复用),这里采用了一种软约束(加了KL散度约束两个网络的参数,同时还可以动态调整设置重要性因子阈值对KL散度约束项进行自适应的调整)。广义优势函数基于多步时序差分的思想,将不同步骤的优势函数进行加权求和。 6、TRPO算法,TRPO算法出现在PPO算法之前,和PPO算法有不少的思想是相同的(也基于重要性采样原理多次复用采集数据),为了限制新旧策略网络的参数不要差异太大,这里使用了硬约束,和软约束不同,硬约束显示要求两个策略网络参数的差异范围(亦即Trust Region一词的由来)。大体的思路是分别基于目标函数和约束函数的一阶和二阶泰勒展开,采用共轭梯度的方法去求解(共轭梯度用于求解大规模对称正定的线性方程组,这里为H(detlta_theta)=g),最终求得更新的方向delta_theta,用于更新策略参数。 以上内容内容的视频分享内容请参考引文1,相关代码实现请参考引文2。 References
-
EmbodiedAI原理和技术摘要汇总
这篇文章对最近学习的关于具身智能相关的技术原理和实现知识做一下摘要汇总,欢迎大家提出意见和建议,具体详细的介绍请参考文末的链接参考1。 1、TR-1模型算法,基于Transformer decoder结构,对结构稍微具体一点的分解为:输入数据预处理模块:输入为ImageToken(经过基于ImageNet预训练的efficientnet-b3的feature extractor提取成9*9*512的张量,flatten为81*512的imagetoken表示)和instruction文本通过FiLM layer(Feature wise Linear Modulation)进行融合,然后经过TokenLearner进行压缩形成8*512的张量形状。然后6张图片(a short history of images)concat一起形成48个token,和positional embedding结合作为Transformer解码器的输入,输出层的多个token进行平均池化,如8个token的hidden_state取平均池化,接出11(action的个数)* action_vocab_size(256)然后计算loss。 2、TR-2模型算法,基于web的图像文本对数据集预训练的Vision Language Model将web数据和robot数据一起进行co-finetune。并且将action建模为值为数字或词汇表中最少用的256个token的文本输出,形成Vision Language Action model用于机器人的闭环控制。 3、多模态大模型ViLT算法,文本和图像分别通过linear projection浅层网络转换为text embedding和visual embedding,然后通过concat不同模态的embedding以单流模式(Single Stream,要区分不同模态的类型,类似于BERT里的segment embedding,还有两个模态开始的special token等),其预测任务为ITM和MLM,其中ITM任务为是否匹配的分类任务和WPA(文本对齐任务,采用的是OT算法去优化文本视觉对齐信息,开源代码实现中任务的loss_weight分别为1和0.1)的结合,通过可视化可以观察高亮的文本和对应的视觉patch的关联度。ViLT可以用于VQA视觉问答任务,以及文本图片(text-to-image retrival and image-to-text retrival)检索任务等。 4、openx-embodiment数据集及TR-X算法及实验,openx-embodiment收集了来自全球20多家机构的20多种机器人的60个子数据集,并将其按照RLDS格式进行了统一格式化处理(episodes[steps[step[observation, action, reward….]]]处理,文章中对收集的机器人数据的特性做了分析,并在此基础上基于9个数据集对RT-1和RT-2模型进行了扩展训练,并回答了相关的模型泛化,模型完成新出现任务,以及模型得参数量,训练迭代次数等相关模型得能力和模型设计决策时的参考量。 5、occupancy networks. 一类以预测连续三维点坐标位置的占用状态的网路,通过学习函数映射的方式预测三维点的占用值(occupancy value)。一般包括编码器和解码器,也可能包含隐空间编码器。编码器对输入的observation状态进行编码,如图像,RGBD,点云数据等,解码器接受预测点的三维坐标以及编码器的输出,输出输入点的预测occ值,如果有隐空间编码器,则解码器同时还要对隐空间进行采样作为输入参数之一给解码器。训练的样本点需要对三维空间目标进行采样,可以针对三维目标的表面mesh及采样数据均衡特性进行采样,这些样本点可以在训练之前通过数据集预处理提前生成。 关于具身智能方面的技术介绍将在后续的分享中进行不定期的更新,我们将会将前言的相关的最新的论文和开源技术向大家持续分享,这些相关内容如有理解上的出入欢迎读者联系我们进行勘误纠正。也欢迎其他方面使得我们做的更好的建议。 References
-
LLM原理和技术系列内容摘要总结
NLP技术发展有较长时间的历史了,这篇文章主要介绍最新的基于Transformer网络架构的语言模型相关的最近几年的较新的技术,以下为相关的技术摘要和总结,如有问题和疑问或不正确的地方,欢迎一起讨论沟通并更新,同时欢迎读者提出改进的意见和建议,希望去做的更好。 1、基于文本数据的预处理,包括各种分词方法实现的分词器(Tokenizer),从简单的基于标点符号的分词,到复杂一些的基于词根词源处理以及一些数据的清理操作的高级分词,再进一步到基于WordPiece(主要在BERT中使用)和Byte Pair Encoding(主要在GPT中使用)的基于统计特性的面向大模型应用的词汇表构建方法,特备是后两者可以支持未登录词(OOV)的处理,而且是大语言模型常用的分词器,基于分词器就可以基于nn.Embedding(vocab_size, embedding_dim)层去构建词嵌入层(Module)以支持大模型的输入了,这种嵌入层和大模型的其他关键模块如Self Attention等一起参与参数的更新。 2、Attention is all you need. 介绍了Transformer在构建序列关系的双向上下文特性建模方便的优势,基于多头自注意力(Multi-head Attention Head)机制的编码器和(Masked Multi-head Attention Head和Multi-head Attention交叉注意力机制相结合)的解码器组成的自编码器应用结构或编码器解码器实现的seq2seq应用架构成为了NLP领域的最先进模型技术的关键技术创新和发明,为后续的BERT和GPT系列大模型创造了基础技术架构。 3、BERT为基于Transformer的自注意力机制的编码器架构,其基于两个训练任务进行的多任务训练,1为从句子中mask掉15%的token,然后从head中对应的位置进行预测出mask的原始的词汇;2为判单上下句子是否是自然连续的。BERT使用特殊词汇如“[CLS]”,“[SEP]”,”[MASK]”等以方便输入数据的表示。BERT的作用主要是提供预训练模型对语言上下文进行特征提取(embedding)将输出数据提供给下游的NLP任务如文本分类,问答系统等。 4、GPT模型为语言自回归任务,通过当前上下文预测下一个token,并不断将生成的token加入到当前上下文中继续预测后续的token的递推过程称为语言自回归任务。其网络模型为独立的Transformer的解码器结构,且和自编码器中的解码器不同的是,每一个Transformer block中只有一个Masked Multihead Attention的实现,GPT的模型的不同版本的参数量差别大,训练数据集大小差异也挺大。GPT-3模型支持的输入上下文token数目最大有2048个,embedding_dim也达到了12288,有96个Transformer block组成,参数量达到了千亿级别。 5、GPT-3.5(Instruct GPT)及以后版本,利用到了RLHF算法,即为基于人类反馈的强化学习算法,采用了PPO的两个policy network和价值网络去更新模型参数,其中policy netwrok的网络结构和GPT模型本身的一致,不同的token可以理解为不同的action,而价值网络的结构在head处加了一个线性层,输出价值标量值,策略网络和价值网络可以是共享Tranformer的基础结构,接出不同的head分别实现token预测和价值预测的任务。训练数据可以离线提前准备好,包括通过参考模型基于prompt生成的多个completion以及对应的基于reward model的打分等。 采用了基于优势函数的剪切的目标函数进行的PPO训练,其中在开源库TRL的实现中,reward为基于Reward Model的打分模型和基于Token Level的MDP建模中的参考模型(如SFT模型)和策略模型的每个token(时间点)的KL散度惩罚项作为综合的激励,因此在TRL的实现中,同时实现了基于KL散度的惩罚和基于策略更新幅度的裁剪相结合的两方面的约束。 以上内容已经做了相关的视频的录制,内容请参考引文2。 References
-
Stable Diffusion的几种支持特定场景应用的算法扩展
这些天花时间梳理了一下Latent Diffusion Models相关的文献,在线文档和相关代码,已经制作了相关PPT,录制了相关内容,这里做一下总结以备后需查阅。 1、基于矩阵低秩的适配,LoRA(Low-Rank Adaption)方式是采用低秩矩阵对模型的预训练的权重进行调整,从而实现高效的模型微调。其大体的过程可以分为:(1)、将模型关键部分的参数的residual部分进行低秩分解,将其权重矩阵分解为两个较小的低秩矩阵的乘积;(2)、微调方法:只更新低秩矩阵的参数,而不是整个模型权重矩阵,大大减少训练时需要更新的参数量;(3)矩阵重构:通过低秩矩阵的乘积来恢复原始的权重矩阵,在加载的时候将重构的矩阵参数和原先预训练的模型的参数对应的部分进行相加得到最终的模型参数; 2、Dreambooth,是一种支持某个类别(如cat,dog等)特殊的subject(如Hally dog)的丰富多样性场景生成的Latent Diffusion Model的扩展,为了克服language drift等现象,提出了用类别的preservation loss和基于unique identifier的类别下subject的联合loss训练,即保证了类别的多样性和泛化能力,也支持特定subject的丰富多样的产经生成。支持全模型微调和基于LoRA的微调。 3、Textual Inversion,基于文本嵌入模型的微调,产生一个特殊的新的需要训练的风格或特性的图片的token,扩展文本嵌入模型的embedding层的输入,多加一个token,在训练时其他的参数冻结(包括DDPM,以及VAE和Text Embedding),只更新多加的token相关的embedding转换的参数,训练的过程实现了特殊的token的embedding和风格特性图片之间的关联关系的建立。 4、ControlNet,在模型的结构上有较大的扩展,在文生图的应用场景下,提供了额外的更加个性化多样化的约束控制,如基于深度图,canny算子边缘图,语义分割图,human pose等等额外的约束,而且ControlNet本身是对Stable Diffusion模型的扩展,和Stable Diffusion模型本身独立保存,加载时和StableDiffusion模型进行融合。而且针对某个特殊的额外约束,一般时需要单独的ControlNet模型,这样各种各样的ControlNet模型就有多个,ControlNet主要由零卷积和UNet中的编码层的block组成,零卷积保证了一开始的训练和原始模型的输出保持一致,保证了训练的稳定性。由于复用了Stable Diffusion模型中UNet的编码层的相关结构,而且初始化时直接将预训练好的Stable Diffusion模型对应的参数拷贝过来作为初始化,因此ControlNet的版本要和Stable Diffusion的基础模型版本要一致以实现加载后兼容。 关于这些内容的实现实验,可以参考引文3中的代码实现细节,在diffusers库的examples目录下,这些天学习的效率进步还不错,技术的素材和内容也在不断积累和进步中,希望能保持下来后面有更多的输出,也希望能和相关的同行有更多的机会交流最新的技术进展的机会。 参考文献
-
线下的两次项目实践教学活动总结
最近有机会和一个教育科技公司有两次合作(老板是中科院其他相关所的年轻的师弟,可创业确有好几年了,这方面的经验还得向他学习),作为他们的现场实训课程老师,这里简要写点线下和线上的知识分享心得,希望今后将这些作为实践的规范去执行。有些天没有更新博客了,感谢大家之前对博客的关注,希望有些内容对读者有点作用或启发,同时欢迎大家的意见建议。后面准备制作文生图和LLM相关的系列知识技能相关内容,也希望后面能将更多更好的相关知识和技能分享给大家。 1、实验环境要在教学实践现场所用电脑上提前完成安装部署并完整验证相关实践内容,不建议在现场时间紧张有限的情况下对于没有验证过但想要去扩展的内容进行临时操作实践,可能会出现一些未知的技术问题需要去解决。而现场debug一般要多花点时间,通常是不允许的。 2、知识讲解和实践内容相互穿插配合,实验演示和学员操作联系相互穿插配合,需要根据反馈灵活的调节现场的教学实践交互过程。 3、勤于将问题和解答记录到相关文档进行总结,后面通过合适的方式分享出来。 4、准备充足的知识和实践内容,多多益善,有时候要根据受众的知识基础,或快或慢需要临时进行调整,多一些内容准备使得课程的快慢弹性更大,就有更加充分的心理准备。 5、信息技术更新迭代速度很快,虽然短时间内这些知识内容可复用,但也要不断积累更新输出新的知识分享,知识分享也要将经典核心技术和最新技术相结合,经典的技术是专业基础核心课程,受众面更广,希望对高中生大学生群体有所帮助,最新技术面向行业工作人员,希望对他们也有所帮助,在工作岗位上能够更加胜任。这样才能不断积累和进步,与时俱进,不落后于时代。
-
关于知识分享和工程技术实践的一点经验
1、PPT制作需要兼顾简洁和细致,风格要基本一致(title以及整体样式格式等),逻辑流程清晰,内容相对完整;有动画演示的页面要先预播一下确认一下播放的顺序和效果,看上去要顺畅协调自然。 2、实验环节要多动手,保证全过程要完整的验证,有些问题在实验的某个环节看似走通了,其实在后续的环境还会出现其他的问题,多次尝试后可能会发现在前面那个看似走通的过程中的解决方法只是暂时的,并不能完整的解决问题。引起问题的原因在于其他地方,找到了问题的原因后整个过程才能顺利解决。所以要完整的验证实验整个环节过程。 3、及时将过程总结成文档,勤于文档撰写,markdown格式的文档编写比较方便,将实验中的一些细节,如软件开发版本,代码中出现的bug及修正,实验的流程以及注意的地方及时记录下来,以防止忘记; 4、同理一些新的技能,新的技巧trick,和自己的新想法以及TODO等内容也要勤于记录; 5、不断学习积累,工程经验也只有在实践中加以锻炼,孰能手巧,重复+接受新知识才能不断进步;科技进步发展很快,终身学习时代持续的学习和知识积累才能不断进步,不落后于时代。
-
LDM算法实验实践记录-Diffusion Models系列5
上篇文章向大家介绍了LDM算法的多个应用生成场景,这篇文章将记录LDM的实践过程中需要注意的一些细节。我们将以训练lsun数据集中lsun_churches子数据集为例进行说明。 LSUN(Large-scale Scene Understanding)数据集是一个用于图像理解和生成的广泛使用的数据集。我们基于LSUN数据集的church子数据集进行LDM相关实验,LSUN数据集采用了lmdb的格式进行的打包,在下载到本地后需先用unzip解压,然后用python的脚本程序进行导出。关于LSUN数据集的使用方式可以参考引文2。 关于LDM算法的开源实现这里加以说明几点:1、AutoEncoderKL类实现了一个扩展版本的VAE模型,增加了感知损失函数和GAN相关损失函数;2、CrossAttention等基于空间图像的Attention实现首先对四阶张量进行变形为三阶张量后和NLP中的transformer中的自注意机制的计算方式一样,其中crossattention中多了一个context的变量,如果没有传入context则自动退化为self attention的计算;3、DDPM和DDIM的采样均有实现,DDPM主要用于训练,DDIM主要是推理过程中进行采样;4、configs目录和models目录都定义了两个阶段模型的训练的配置文件,都可以作为–base这个选项的值传入,main.py是作为训练VAE和LDM两个模型的统一启动桥本文件,通过yaml文件的配置进行了训练任务的定义,main.py通过解析这个配置文件以支持不同的训练任务;5、可以通过conda创建特定的env来搭建实验环境,其中需要注意的是transformer的版本需要再补充定义一下(经验证transformer==3.0.0版本满足实验要求),可能当时开源这个代码的时候是和代码兼容的,但最新的transformer版本出现了不兼容的问题;6,在ddpm.py的1030行加上一句self.logvar = self.logvar.to(self.device),实现变量在同样的设备上,否则可能出现一个在cpu设备上一个在gpu设备上的运行时error。实验过程的一些问题记录可以参考引文3。 References
本博客主要包含一些工程技术方面的短文和日常生活的随想。感谢所有师长领导朋友和老同学们的关心支持,特别感谢上海交通大学、上海建设管理职业技术学院、上海闵行职业技术学院、中科院软件所、北京师范大学及中小学的老师同学们和上汽集团等工作过公司的领导同事们给与的关爱和支持,以及家人们的期望和默默付出,希望有些文章能对大家有所启发。由于作者水平有限,撰写较为仓促,文章中难免存在一些缺点和错误,殷切希望来自世界各地的读者批评指正。期待能够和大家一起学习,迎接挑战,共同进步。