当前位置:   article > 正文

许大人专栏_面试怎么介绍自己的科研项目

面试怎么介绍自己的科研项目

详细介绍

1.自我介绍

思路:介绍内容要与个人简历相一致:表述方式上尽量口语化;要切中要害,不谈无关、无用的内容;条理要清晰,层次要分明;事先以文字的形式写好背熟。
自我介绍:

  • 各位老师好,我是来自北京工业大学电子信息工程的研究生**,我可以从学校经历、项目经理、实习经历及相关技能四个方面进行一个简单的自我介绍。
  • 第一个方面在学校时由于学业上及科研上发表了一些相关科研成果,因此也荣获了国家奖学金,小米特等奖学金,还有科技创新特等奖等。我在学校的科研方向是基于数据驱动的污水处理过程监测,隶属于北京工业大学数字社区。
  • 第二方面的话,我从我在学校的相关项目来进行一个简单介绍,这里,然后在学校跟和老师参与了两个自然科学基金的项目,分别是城市污水处理过程异常工况监测及相关的相关性指标软测量,第二个项目的话是面向青霉素发酵过程的日常工况监测,在这两个项目中也通过搭建来完成这个过程的宽度学习模型、深度学习模型,并对相应的模型进行结构上的改进、性能上的提高来完成相关的任务。如果过程中发生了故障人会及时诊断发生故障的原因,并且及时采取相应的措施对故障进行一个处理。同时我们还要关注一些比较难以测量的一些一些关键的指标。化学需氧量和生物需氧量,其实这些指标可以直接海洋物质处理过程的一个处理效果,但是我们很难直接进行一个测量,所以我们通知当时通过当天一些软测量模式来完成关键指标一些进对进行一些回归。通过我们的实验也可以发现我们的这种回归效果和真实的这个话其实理合性会比较好,因而我们可以通过这种方式来降低到一些。在一些指标测量上的一些时间成本和金钱成本的一些消耗。在这两项目中,我通过用matlab及python等编程语言并结合深度学习框架如tensorflow来完成相关模型的搭建完成一些数据处理。并最终完成了一个对过程状态的一个检测和关键指标的软测量,共发表四篇论文在SCI一区上。
  • 第三个方面的话,我可以给你介绍一下我的实习经历。我是从今年三月份到现在,在北京阳光伟烨网络技术有限公司实习。我主要是参加了两个项目,第一个项目的话是完成一个图像分类,在这个图像分类研究中,我们主要基于resnet搭建对比学习模型来完成对图像的分类,保证模型图像分类的精确度的前提下,提升模型的公平性。该项目主要就是为了防止,因为某些对某些敏感特征有偏见的数据导致我们所训练模型它对某些特征存在一种歧视,而我们要做的就是要降低模型对某些敏感特征的一些歧视性。敏感特征可能包括年龄、性别还有肤色等。第二个项目是关于LLM大模型的调研,当时我们是利用清华大学开发团队的一个ChatGLM。模型来完成一个牛奶广告的对话任务。我主要是通过加载他们已经训练好的开源模型来完成一个简单对话一个任务,然后基于我们本地的一些相关数据集(自制了100条数据)对这个模型去微调。通过微调之后可以发现所生成的对话,它更符合我们这个牛奶广告领域对它的一些表达方式。
  • 第四个方面,可以介绍一下我的相关学专业技能,由于学校的项目及实习经历,其实主要是通过MATLAB,还有Python,同时结合还有一些深度学习框架如tensorflow来完成一些相关机器学习模型的一些开发,同时也对相关模型的一些改进。对一些循环网络,长短记忆网络,门控单元网络其实都是相对比较了解的。主要搭建的模型是使用宽度实际网络。同时我也咨一自学了测试理论相关知识,学习了计算机网络原理,也了解一些我们的计算机网络体系,以及Java语言等mysql数据库等课程。

以上就是我的一些基本情况,谢谢各位老师!

以下是如果我作为面试官我可能会问的一些问题:

关于实习的问题

介绍一下你实习时公平性对比学习模型做图像分类的任务

好的,面试官您好,再借此回答您这个问题之前,首先我要和您讲一下我这个模型的公平性的一个问题。模型公平性主要是防止可能因为历史的数据原因,导致数据本身就对某些明显特征具有歧视。另有可能银行贷款系统化,可能对性别本身可能就有一种歧视,我们感觉这种就代表,嗯,就是有敏感性特征,我们就降低对这种敏感性特征这种影响的话就是。提高我们的模型这种公平的一种策略。但是我在这个实习中,我做一个项目的话,是基于网上那种公开数据,分别是一个u TK face数据集,还有一个celeba数据集,这两个数据都是在网上通过寻找的,大概有20万张的一种图片数据集,这个图片数据包。或一些人脸的,包括包括人的,就是是一种人脸,人脸的图片说。在这个数据中,我们可以观察到人的不同性别、肤色,还有眼部的大小,鼻子大小,是否有戴帽子,是否有他们的头发、长发、短发等等。就各种一些特。在这个过程中的话,因为其实这这种数据的话,是网网上公开数据,但是我要验证我模型的一种公平有效性的话,我要在这种数据上进行一种一种验证,所以在这个数据上我要人为的定制一些敏感性特征。

首先我们这个一个分类任务的话,我当时的一个分类任务是要判辨出这个人他的年龄是是否小于35岁,也就是一个二分类任务,但是在这个二分类任务中,我们要降低一些其他一些敏感特征去影响,但是这种敏感特征是。我人为定义的它的过程,我定义的敏感特征是她的头发的卷曲程度,还有她的性别,还有她的肤色。而我们要做的话,就是要保证模型对我们图像分类结构的一个准确性前提下,来降低这种这种特征对它的一种影响。最终可以获得一个效果的话,就是无论这个人他是卷发还是一个长发,他最后判判别为判他最后判断为他是一个小于35岁还是大十三十五岁的一个概率,它应该是相等的,这就是我们模型的一种公平。也就是这种敏感性特征应该对模型最终分裂结果是没有影响。

介绍一下数据集,从哪里获得的,是什么样的

我的数据集是网上的一种公开数据集,分别,然后数据名字叫做utk face,还有celeba。这两种数据集都是一些关于人脸的一些图片,这些人脸图片,有各种一些特征,比如一些他们的性别,头发的卷曲程度,还有年龄,肤色,一定的大小的大小。等等。

你怎么对数据集进行划分的?训练集、验证集、测试集都是什么

关于如何对数据进行一个划分的话,首先是我需要对先对将所有的数据进行一个随机打乱,因为本身这种数据集的话,它是按编号进行一个排列的,这些编号的话是反映它一种年龄的一个变化。所以我首先要保证一个数据的一个均衡性的话,要对数数据进行一个随机打乱,打乱之后我将训练及验证及测试题的比例都是7 : 2 : 1。

你说说你是怎么做到提高模型的公平性的

其实众所周知的话,我们训练好一个模型的话,是通过一个深度学习,它通过一个梯度下降进行一个误差的反向传播,最终完成模型一个训练的中中间误差的话,我们是通过一种损失函数在。当然我们选择使用交叉啊,我们使用的是一种对比学习,对比学习的话,它的损失函数是一种。交叉上损失函数。我们在损失函数的分母部分添加对敏感特征的一个约束啊,我们要保证我的模型的分类一个准确性,同时我们要保证不同特征之不同敏感特征之间分类的概率是一样的话。所以我们要保证。不同类别中的相同敏感特征。不同不同类别中的不同敏感特征,要对它进行一个衰减。经过对这种不同类别特征中的敏感特征一个衰减的话,可以对这种敏感特征进行一个约束,最终可以保证我们的模型在一个在像什么训练的过程中,也可以保证模型从同一种类别中的不同敏感特征。那它的概率尽可能。你相。最终实现模型一种公平性。

怎么评价模型的公平性

评价一个模型的公平性的话,就要保证模型它不同敏感特征,最后预测概率是一样的,在这个过程中我们采用了两种一个指标,一个叫做DP,一个叫做EO的话,它的一个一个属性的话就是要保证。我的目标判断,同一种类别中不同敏感特征,它的概率是一样的。第二种评价指标是EOEO的话,它的方式是。
关于DP的解释的话是DP需要满足是不同敏感特征的样本,他们预测为同一种概率,同一种类别的概率是相同的。关于eo是一种叫机会震动它的一个月,它的一个属性的话,就是要保证我同种类别下我不同敏感特征。预测为同意,预测为不同特征之间的概率是相同。
强烈建议:http://html.rhhz.net/tis/html/202007004.htm#outline_anchor_10(我可以带着你一块读,肯定比上面讲得好,但是如果是回答问题上面的可以啦)

什么是敏感性特征?

关于敏感特征的话,其实是有一点我们人为定义的啊,在这个我们的UTK或者celebrate数据中的话,我们人为定义了某些特征为一种敏感特征,当然其实在这个过程中,我们只是为了来验证我们模型一种公平性是否有一个提高的一个特性。但是如果在一个真实的案例中的话,这种敏感特征的话,一般是就是就是我们在社会中可能就是比如肤色,比如性别,就可能这种就是。其实关于这种其实我们比较敏感词汇的话,这种定义的特征化就是一种敏感特征。

在这个项目中你负责什么部分?

在这个图片分类的一个项目中的话,其实当时我们这个项目的话,其实要发表一篇论文儿,这篇论文的话是我们自己定量,定量一种新的一种模型,当然其实关于这种新的模型的话。其实我对他了解有限,因为可能因为这个主要涉及到一个这个公司的一些核心算法,其实这种核心算法我对一个事情的话,嗯,其实他们是对我,就是是对我有有所保留。的,所以我其实并不能介绍这这个项目的一个核心,我主要负责的话是针对这篇论文中一些相关对比算法一些实现,比如在这过程我用restaurant完成一个图像分类,我用对比学习搭建了,哦,我用对比学习完成图像分类。我算这。当然我还记到一个CVPR,一个公开发表一个模型的话,搭建了一个公平的对比学习,最终完成一个这个论文中一些对比算法,一个验证。

这个数据集本身就是对敏感特征有偏见吗,比如你说的对年龄、性别?

其实在这种公开数据上,其实我们并没有并没有强迫去定义,或者就是我们所数据的本身的话,它是对敏感特征有偏见的,也不能说就是就就这里面的话,它的。他他一定对性别有偏见,其实这是其实这是没有根据的,但是其实其实当时从当时网上公开这种数据的话,它是一种二十二十万的一种数据,所以我们应该去了解到。在在在这个,在这个20万属于在这个里面的话,男性大概是占了有15,就是12万张,女性占了8万张,其实在这里面是性别是分配不均衡的,年龄的话就是年龄。年龄阶段的话,其实它是它的每个年龄阶段,它其实分布也也不相同,当时我们听了一个判断,它小于35岁的大概有十十八万张,而大于。小于35岁的大概有7万张,而大于35岁的大概有13万张,所以它其实本身的话,在这里面数据是并不在这种特征下,它是数据分布不平衡的,而为了验证我们的模型一种公平化。所以我们把。这种特征定义的一种敏感特征,最终的话,其实我们还是在停在一个科研层面,要验证一下我们模型的一种公平性,所以当时其实这种敏感特性的话,是我们认为定义的。

自监督学习、无监督学习和有监督学习的区别?

首先我谈谈我对有监督学习算法的一个认识,在有监督学习算法中,模型接收带有标签的数据,它的每一个样本中都有一个明确的标签。一般我们用有监督学习的话,目标是为了学习从输入到输出的一种映射,从而最小化我们预测值和实际之间的误差,并将误差进行反向传播,来不断完成模型的训练。
对于无监督学习它没有目标输出。模型接收未标签的训练数据,没有目标输出。模型需要自行发现数据中的模式和结构。
关于自监督学习的认识的话,自监督学习是通过设计一些认知的模型,可以从输入数据中学习到有意义的特征,我认为它是一种特殊的无监督学习。一般自监督学习通常是对数据如图片进行变换或者遮蔽来实现,然后生成一些伪标签模型,通过这种伪标签的话,就会像有监督学习一样进行一个训练啊。一般自监督学习的话,采用的方法是例如对图像。进行进去的话,我会将图像中的一部分进行一个遮挡,使得模型通过通过我们数据中来学到遮遮挡的一些信息,通过就是我们现有的数据并不需要进行标记,而然后进行一个遮遮挡。那我是认识到一个图片,一些相关内容。例如我在对比我所提的,例如我在项目中的公平性对比学习,公平对比学习的话,其实他们之前的学习和有监督学习两种方法,在自前的学习中的话,我们是相相对很多就是跟。数据集中某一张图片,我们对图片进行进对,我们可以进行裁剪、截取、翻转等多种形式,获得关于同一张图的不同表现形式。我们将这些图片进入一个。要么一个正样本比其他,要么定一个负样本,通过这种这种生成伪标签对模型进行的训练,让模型用到一些特征。

你用对比学习来实现图片分类?你的损失函数是啥?评价指标是啥?为什么要关注公平性?

我们在对比学习中使用的是Resnet网络,Resnet网络用于实现图像的分类。我在这个项目中完成了四个模型,有监督的对比学习,无监督的对比学习,有监督的公平对比学习,Resnet网络四种模型进行图像分裂。对比学习是一种机器学习技术,算法学习区分相似和不相似的数据点。对比学习的目标是学习数据的表示,以捕捉不同数据点之间的基本结构和关系。在对比学习中,算法被训练最大化相似数据点之间的相似度,并最小化不相似数据点之间的相似度。通常的做法是通过训练算法来预测两个数据点是否来自同一类别。
对于无监督的对比学习,我对同一张图片进行裁剪、反转、缩放等处理获得同一张图片的多种表现形式、将这些同一张图片的不同形式作为这一张图片的正样本,其他图片作为负样本进行训练。
有监督的对比学习,对图片进行标记,同一种类型的图片作为正样本,不同类型的作为负样本,进行训练。
公平性有监督对比学习:在有监督对比学习的基础上对敏感属性进行约束,如对不同类别相同的敏感属性添加到损失函数的分母上,这样模型在训练时就可以使得不同类别同一种敏感属性特征的样本更加远离,从而实现模型对敏感属性的约束,增加模型的公平性。
损失函数:在这里插入图片描述
评价指标:
在这里插入图片描述
为什么需要公平性?
在这里插入图片描述在这里插入图片描述

我看你实习时做了图像分类,你能讲讲你做了哪些工作吗?

使用网上两种公开数据集UTKface和Celeba,这两种数据集都是由很多人脸图片组成的。我们的任务是基于图片完成图片中人物年龄的判断。在这个任务的基础上我实现了Resnet、对比学习、有监督对比学习和公平性有监督对比学习四个模型。

你调研了LLM模型,你讲一讲在这个项目中你都做了啥?

基于清华大学开源的语言模型LLM实现了一个关于明治牛奶的广告生成任务。当时基于网上项目流程,首先完成了关于服装店的衣服款式的广告任务。在实现这一任务的基础上我们使用本地的牛奶广告数据集(这段数据集我是通过python爬虫从网页种收集到的关于明治牛奶的相关广告词),基于本地数据集实现了对LLM模型的一个微调任务。

你都知道哪些微调方法?你为什么选择这一种呢,没有尝试其他的吗?

GitHub总结:https://github.com/liucongg/ChatGLM-Finetuning
Freeze、Ptuning-V2,Lora
当时我们将LLM模型除了最后一层外其余全部进行冻结,只对最后一层的全连接层进行更新,采用的更新方法是Ptuning-V2(https://blog.csdn.net/qq_41771998/article/details/129958753),可能存在问题这块我再确认一下啊

你的数据集是啥?多大?

UTKFace和Celeba,分别有20K,和200K张人脸图片,图片由不同国家、不同肤色、不同年龄、不同装扮等各种类型人组成。这些图片中如性别、肤色等都可以归结于敏感特征。当时我们要做的是基于图片完成人物年龄的判别。这些数据集都是网上的公开数据集,我们要做的是保证模型对年龄辨别准确性的基础上降低图片中其他敏感特征对结果的影响。
UTKFace:https://blog.csdn.net/YINTENAXIONGNAIER/article/details/127443625
Celeba:https://zhuanlan.zhihu.com/p/35975956/

你实习时用的服务器什么配置的?

在这里插入图片描述
只要回答出显卡型号和显存量就行,然后一般都会有多块GPU,我当时是4块GPU同时运行的。

模型在多块GPU上运行是怎么实现的?

我的理解,不太全面。
这里有个网站介绍了4种GPU并行处理的模式:https://zhuanlan.zhihu.com/p/536304655
我当时记得是调用了torch.nn.parallel。
回答的时候你可以选择一种GPU模式进行回复。可以用模型并行训练的模式。

怎么评价模型的公平性?

当时采用的一个指标是EO,这个指标是通过计算不同敏感属性的样本当标签都是正样本时判断为正样本的概率的差值。该指标一般在0~1之间变化,当EO值为0时代表模型对该敏感特征绝对的公平,当EO值越大代表模型越不公平。通过对比发现有监督对比学习的EO值是0.524,ACC是89.5,而公平性有监督对比学习的EO值是0.398,ACC是89.1,可以发现的是通过引入公平性机制降低了模型对某些敏感性特征的影响。精度有微小的变化,但是只是牺牲了较小的精度指标却获得了公平性的大幅度上升。

你这个项目用什么工具完成的?硬件设备是什么?

一般面试都会围绕数据集、创新,解决问题的方法进行询问。个别会问一些深度学习的基础知识,如梯度下降,优化器,激活函数,损失函数等
之后会结合部门的业务问一些你的经历,如CV算法,NLP算法。CV方面你可以说用过resnet、CNN、BLS进行数字识别,YOLO进行目标定位。NLP方面你就说transformer实现机器翻译,在这个过程中对词向量、句向量有了更多的认识,接触到了CBOW模型、bert、gpt。在NLP中文字通过编码也可以转换为时间序列数据,而我们污水处理过程也是在处理时间序列数据,因此了解到了很多时间序列模型,GRU、RNN、LSTM、双向LSTM,我也使用GRU发表了污水处理过程的论文一篇。
关于CV算法和这些NLP算法的介绍,我总结道另一篇博客中。

科研项目问题

2.介绍一下你的项目

在研究生期间,我主要是参加了两个项目,分别是一个污水处理过程,还有一个是针对青霉素发酵过程的一个故障检测啊,我会针对这两个项目分别进行一个简单介绍,首先针对污水处理过程,我可以先介绍一下我们污水处理过程的一个研究背景。

  • 污水处理过程的话,要保证污水处理过程里的高效运行,保证我们污水处理它一个处理后的污水它一个达标的话,要保证污水处理过程中。不存在故障或者有故障的话,我们要及时给他解决。要保证污水处理过程的高效运行的话,一个有效的方法就是在故障发生早期我们就可以检测到,然后对故障进行采取相应的措施,然后解决故障。要完成一个故障检测的话,我们的模型必须要可以对故障进行一个精确的一个检测,也就是模型的检测精度是一个必须考虑的一个目标。第二的话,其实要结合我们的一些。具体具体场景。模型的监测精度是一个首要考虑的一个目的,但是除此之外,我们还要考虑到一个模型的时间开销。综合这两个点的话,我们选通过第二页那很多相关一些论文确定为宽度学习作为我们主要的一个研究研究模型。

我们基于宽度学习,然后结合污水处理过程,我个人总共是发表两篇SCI论文。

  • 首先我可以简单介绍一下我的论文一。在这篇论文中我提出来一种动态堆叠宽度学习网络。动态动态堆叠宽度学习网络主要用到的相关技术是岭回归算法、伪逆技术、独热编码、时滞思想、集成学习、残差连接、增量学习等技术。在这个项目中对统计方法如KPCA、深度学习如SAE、RNN、LSTM等技术也进行了研究,并作为对比实验。动态堆叠宽度学习网网络是对我们传统的宽度学习网络的一种改进,之所以会提出该模型是为了解决当前宽度学习系统在污水处理过程中关于时间相关性提取的问题以及精度的问题。污水处理过程是这个时间样本序列,其实它本身就具有很强的一种非线性和时间相关性。当使用传统的宽度学习网络完成污水处理过程监测时的精度其实并不是特别高效的,我应该找一种办法来提高宽度学习网络。第二个方面的话,宽度学习网络,它并不能取取到时间序列数据之间的时间相关性。为了改进宽度实际网络在污水处理方面一些缺陷,我调研了很多方法,结合一种时间序列处理方法-------时滞思想来对宽度学习系统进行了改进。在我们输入层的话,我对时间样本进行了一个动,采用时滞思想对它进行一种动态扩展,这种动态扩展是将历史样本补充到我们当前样本的一种方式,通过这种设计,动态的宽度学习网络就可以挖掘到样本之间的相关性,而这种样本之间的相关性被提取到,这对我们进行故障监测具有很重要的一些影响。通过实验也验证这种改进方法是有效的。针对宽度学习的第二种改进措施的话,是我们采用这种集成学习的方式,将多个宽度学习网络建成一种集成。因为我们知道单个模型的话存在一些不确定性,误差也会比较大。我们当时采用这种方法是通过训练多个宽度学习网络,将这些宽度学习集成到一块来完成监测任务。具体来讲,我们使用宽度学习系统来学习上一个宽度学习系统的误差,因为如果我们知道浅层网络它一个是的误差之后,我们可以把误差补充到我们之前的模型中。通过这样的方式可以降低模型的误差,从而实现模型精度的提升。我从这两个点出发,然后提出了动态堆叠宽度学习网络,然后完善污水处理过程的监测,通过时间验证的话,这种改进方法都是有效的,它相对于传统的宽度学习网络,在监测程度上提高了大概3个百分点。

其次,我针对我的研究成果二,我提出一种慢特征宽度学习网络。我们也是要针对一个大的背景,即要保证模型监测精度的前提下降低模型更新的时间开销。在宽度慢特征学习系统中,我们主要使用了宽度学习系统、慢特征分析技术。基于python、numpy、pandas、tensorflow等工具完成了相关对比实验如DKPCA、SAE、LSTM等模型。慢特征宽度学习网络主要是针对污水处理过程的一种动态特性,因为我们知道污水处理过程是一个时间时间样本序列。时间样本在动态变化,而过程的本质特征隐含在这种动态变化中难以提取,我们通过这种在宽度学习网络的输入层中嵌入了一种慢特征提取机制。这种机制提取过程中缓慢变化的特征,这种缓慢特征与过程的状态具有很强的拟合性。基于这种缓慢的特性,我们再进行关于它的非线性特征提取,最终实现一个过程监测。相对于传统的宽度学习网络,它在监测精度上提高了大概有8个百分点。
关于慢特征的解释:在输入层中构建慢特征窗口,每一个慢特征窗口基于两种技术获得,白化技术和广义特征分解技术来求解优化问题来实现。具体来说通过白化技术来去除特征之间的相关性。慢特征的提取是一个优化问题,目标函数是时间序列之间变化最慢。为了保证所提取的慢特征是有效的,对慢特征进行了三个条件约束,分别是零均值、单位方差和独立。这三个条件用于保证慢特征不是一个常量,且慢特征之间不存在信息冗余。这种优化问题可以用广义特征分解技术来是实现。最终我们可以获得映射慢特征的奇异矩阵,最终实现慢特征的计算。

关于青霉素发酵过程:
在青霉素发酵过程是一个间歇过程,需要菌种选择、菌种培养、发酵罐发酵、青霉素制备等阶段。我们主要关注于发酵罐发酵的这一个过程。在这个封闭的发酵罐中,我们需要根据菌种的不同生长阶段,调整发酵罐的一些参数,如PH、温度、底物浓度(营养物质,如葡萄糖等)。各个控制设备必须密切配合才能保证菌种在发酵过程中产出合格的青霉素。如果出现控制设备的故障或者控制设备之间的协同出现差错可能会到导致最终生产的青霉素产品不合格。如果不合格的产品流入到市场势必带来更多的不利影响。因此我们要对发酵过程密切监测,如果有发生故障的风险就及时报警,在故障发生早期完成故障的处理,保障青霉素的稳定生产。我们主要针对发酵过程中最常见的三种故障进行监测,分别是通风速率异常、搅拌速率异常、以及底物流异常。
在这个背景下,我主要搭建出两个模型,一个围绕在宽度学习系统,一个围绕在深度学习。针对青霉素发酵过程的特点,我提出了针对宽度学习和深度学习的增强模型。增强模型在非高斯性特征方面的提取能力,主要改进为在宽度学习和深度学习的输入层中的神经元中嵌入一种通过广义协方差矩阵获得独立原子的方式,通过这种方式可以实现特征的非高斯特征提取。经过独立原子完成对原始特征的一个映射。映射后的特征在宽度学习中经过特征层和增强层完成数据非线性特征的进一步提取,最终实现故障分类的任务。在深度学习中,通过门控单元网络(GRU)实现数据的非线性和时间相关性的双重特征提取。这种GRU网络依靠更新门和重置门可以有效地降低梯度消失带来的风险。为了提高宽度学习系统在时间序列方面的特征提取能力,我们在增强型的宽度学习输入层的中在计算独立原子之前通过时滞思想来完成数据的扩展。基于这种时滞思想和独立原子结合的办法最终实现青霉素发酵过程数据特征的深度挖掘,最终可以有效地监测发酵罐中的异常现象,并及时对异常进行处理。

3.为什么不用比较常用的时序模型,而选择宽度学习

关于为什么选择宽度学习而不选择其他时间序列模型?
在污水处理过程中我们选用宽度学习的主要原因是考虑到一个现象,即污水处理过程在持续的进行,每天都会有各种地方的污水流入污水处理厂,同时处于一个室外环境,很容易受到天气、温度等各种外部工况的一个影响。这导致污水处理厂一直处在一个持续变化的过程中,即是一个动态系统。对于这种动态系统,我们应该构建一个可以动态更新的模型才能更好地适配。虽然传统的深度学习在离线数据上获得了很高的监测精度,但是深度学习一般都通过迭代进行梯度下降来完成模型的训练,这个过程常常需要花费较长的时间。这就带来一个问题如果未来我需要对模型进行更新,无论是改变模型结构还是增加数据量,都需要对模型进行重新的训练,因此很难快速地完成模型的更新。而对于工况多变的污水处理过程常常需要模型能够实时地进行响应,可以发现深度学习在实时性上需要增强。而我们采用的宽度学习系统可以通过增量学习的方式完成模型的更新,这种增量学习可以在短时间内完成模型的更新。在我们的数据集上进行了验证,宽度学习的更新时间大概在0.2s左右,而深度学习如SAE在45s左右,提高了接近200倍,这几乎可以视为一个在线更新模型。因此我们决定用宽度学习来完成污水处理过程的监测。

4.介绍一下宽度学习

宽度学习我可以从结构上、训练方式及增量学习三个方面进行一个介绍。在结构上,宽度学习共有三层结构,特征提取层、特征增强层和输出层。这个三层结构都属于深度学习中的全连接层的结构,特征提取层—特征增强层----输出层,但是不同之处是输出层同时接收特征提取层和特征增强层两个层的输出,即采用一种残差连接的方式将特征提取层连接到输出层中。训练方式上,宽度学习有两种计算权重的方式,

5.你说的这种增量学习能否用在深度学习上

在深度学习网络的最后一层使用增量学习的方式进行更新是完全可行。但是如果在中间隐藏层中使用增量学习的话,需要有一个先验条件就是我需要确定该隐藏层的理想输出,即隐藏层的标签应该是什么,如果我们可以对隐藏层的输出进行确定的话。我们也可以对隐藏层采用增量学习的方式进行更新。就我的理解,增量学习一种基于权重A的基础上,通过严谨的理论推导公式,这段关于权重更新的公式可以通过简单的矩阵乘积获得,获得的更新后的权重B。在这个过程中没有梯度下降,没有迭代过程,因此可以快速地完成模型的更新。如果未来在深度学习中引入增量学习的机制,我相信一定可以扩展深度学习在更多领域的应用。

7.你项目中的数据集是什么样子?,有没有图像、视频数据?

在我们科研项目中,我们的数据集是一批时间序列数据,这种时间序列数据主要是通过我们在污水处理厂它的各个反应池,还有沉淀池布置相关的一些传感器来进行数据采集。我们所提到特征共有18种,例如温度,酸碱度,还有它的溶氧浓度,丝状菌微生物的一些浓度、含氮浓度、含磷浓度。这些可以反映出污水处理的一个过程状态。我们的数据集就是这样的时间样本序列,每隔15min进行一次采样。对时间样本序列数据进行一个分析,对它进行特征提取,通过这些特征来预测出当前的一个污水处理过程的一个状态。

在我们的项目中,其实并没有使使用到关于一些图像或者视频的一些数据,但是我觉得如果如果我们未来可以搭建一些多模态模型,我们完全可以将一些相关图像或视频数据引入到我们的数据集中,因为我觉得构建一个高效地模型需要从模型和数据集两个角度出发。如果想要全方位地监测污水处理厂,我们应该使我们的数据更加丰富多样,因为我觉得不同模态的一些数据可以反映出不同角度的一个污水处理厂的一个状态。我们当前其实主要还是受到数据集的限制。因为我们目前的数据有两种获取方式,第一种是我们根据国际水协会所发布的污水处理过程模拟平台BSM,我们通过这个平台可以模拟出污水处理厂相关的运行工况,同时我们也可以人为的设置某些故障,从而获得一些丰富的数据集。第二个是我们项目组和北京的十八里店水厂有一个合作的关系,水厂给我们提供了一部分水厂实际运行过程的时间样本数据,我们基于这些数据进行一个相关的一些监测。其实无论是国际水学会还是十八里店水厂,所能够提供给我们的数据都是一些时间样本序列的数据啊,因而我们受限在数据集的种类上,因此目前并没有使用到图像和视频数据。但我觉得这是一个很好的方向,相信未来一定会有更多多模态模型在污水处理过程中出现。

18.你们数据量有多大,介绍一下你的数据集?

污水处理过程
嗯,在我们污水处理过程中的话,其实我们从有45批次的数据,进一批次的话,是一个污水对上运行14天一个工况,14天的话,在这个过程中,我们是每个15分钟进行一个采样,所以14天的话,我们有1344个采。样本,然后总共这种一个批次,1344个样本,我们有45批次,所以总共属于大概是在大概在5万左右。我们每个样本的话是包含污水处理过程中18个过程变量。这18个过程变量的话,主要是集中在二沉池,在这二沉池中,因为二沉池的话是关于出水过程中,所以我们更加关注于二沉池一个工作一个状态,但是为了保证我们要关这次整个污水处理厂的话,其实我们在每一个。采样池中都构建了一些传感器,当然其实我们采集到的一些特能化都是相似的,所以我们要关注二层池,还有厌氧池,还有有氧反应池中它们的18个过程变量,最终构成我们一个数据集数据。经过这种话,总共是5858的话,大概有90个特征,用这90特征完成整个污水处理厂的一个过程,一个监测。
青霉素发酵过程
在青霉素发酵过程的话,其实我们是通过喷性的一个平台,它可以防菌中在一个发酵罐头,青菌种发酵过程产生青霉素一个过程,在这个过程的话,其实我们它400小时是一个青霉素一个生产周期,所以我们需要关注整个。一个一个批次的话是有400个小时持续清理过程,然后我们那个一个小时进一个采样,所以一个批次的话,我们有400个样本,每个样本的话是包括十个过程变量,十个过程量涵盖了青霉素发酵过的一个温度。安全度,还有它一些通风情况等,这十个特征,十个过程变量,我们用这个过程变量来监测整个屋清除发酵过程,它一个状态,然后进行一个相应的反馈到底。

8.介绍一下transformer

Transformer它首先被提出来,是用于机器翻译的任务。Transformer分为编码器和解码器,编码器和解码器的结构是类似的。首先我们可以简单介绍一下transformer的编码器部分。在编码器的过程中,它的核编码器的核心的话是一个多头注意力机制。Transformer的编码器部分其实主要是由四个部分组成,多头注意力机制、前馈神经网络、残差连接,还有一个batch normalization层。Transformer的一个核心是多头助力机制。我可以针对Transformer的一个多头注意力机制进行一个简单的介绍。在解释多头注意力机制之前,我们首先认识一下注意力机制。Transformer的中使用的是一种自助力机制模型。关于自注意力机制,我们可以举一个关于文本翻译的样例进行介绍。例如针对一批英文单词,每一个单词我们都可以用一个词向量进行表示。在transformer中针对每一个词向量,在三种不同的空间进行一个表示,这三个空间分别叫做query,key, value。其实query,key, value都是对词向量这三种不同空间一个表示,当然它们这三种都有一些不同的作用。通过query,key, value,我们可以计算出不同词向量之间的相关关系,也可以计算出上下文之间的关系。这就是传统中自注意力机制模型。而Transformer又使用了一种新的方式叫多头自注意力机制,这种多头自注意力机制可以参考卷积神经网络中卷积核的一个概念。也就是我们可以在不同的空间(即不同的头)计算它的注意力机制,这样可以使我们的注意力机制更加准确,而并不会因为某一个头它有一定随机性而导致它的注意力机制的误差较大的一个现象出现。通过多头注意力机制,我们在每个头内部就计算它的一个自注意力机制,最终我们可以获得在整个空间中的一个注意力的分配。在此基础上,添加残差连接,还有Batchnormlization层,还有前馈神经网络,最终完成一个编码器的构建。Transformer的解码器部分和编码器是类似的结构,唯一不同的话是在解码器负责接收在线样本的输入,而我们在进行测试的时候,其实我们是看不到未来的样本的。因为未来样本并没有发生,所以我们在Transformer的解码器中,对未来样本进行了一个mask标记,使得我们的模型对未来的一些样本进行一个遮挡。这样模型会更加符合一种逻辑上的这种表达。这种Transformer模型在机器翻译领域得到一个很好的验证,像当今比较流行的一些GPT模型,其实他们的也都是一些Transformer的一个衍生版本。我相信Transformer的这种结构也会随着我们对大模型的不断研究,得到更加广泛的推广。

9.你在论文中应用宽度学习系统,有对宽度学习进行哪些改进,为什么要这样做?

  1. 污水处理过程是这个时间样本序列,其实它本身就具有很强的一种非线性和时间相关性。当使用传统的宽度学习网络完成污水处理过程监测时的精度其实并不是特别高效的,我应该找一种办法来提高宽度学习网络。第二个方面的话,宽度学习网络,它并不能取取到时间序列数据之间的时间相关性。为了改进宽度实际网络在污水处理方面一些缺陷,我调研了很多方法,结合一种时间序列处理方法-------时滞思想来对宽度学习系统进行了改进。在我们输入层的话,我对时间样本进行了一个动,采用时滞思想对它进行一种动态扩展,这种动态扩展是将历史样本补充到我们当前样本的一种方式,通过这种设计,动态的宽度学习网络就可以挖掘到样本之间的相关性,而这种样本之间的相关性被提取到,这对我们进行故障监测具有很重要的一些影响。通过实验也验证这种改进方法是有效的。针对宽度学习的第二种改进措施的话,是我们采用这种集成学习的方式,将多个宽度学习网络建成一种集成。因为我们知道单个模型的话存在一些不确定性,误差也会比较大。我们当时采用这种方法是通过训练多个宽度学习网络,将这些宽度学习集成到一块来完成监测任务。具体来讲,我们使用宽度学习系统来学习上一个宽度学习系统的误差,因为如果我们知道浅层网络它一个是的误差之后,我们可以把误差补充到我们之前的模型中。通过这样的方式可以降低模型的误差,从而实现模型精度的提升。我从这两个点出发,然后提出了动态堆叠宽度学习网络,然后完善污水处理过程的监测,通过时间验证的话,这种改进方法都是有效的,它相对于传统的宽度学习网络,在监测程度上提高了大概3个百分点。
  2. 我提出一种慢特征宽度学习网络。我们也是要针对一个大的背景,即要保证模型监测精度的前提下降低模型更新的时间开销。慢特征宽度学习网络主要是针对污水处理过程的一种动态特性,因为我们知道污水处理过程是一个时间时间样本序列。时间样本在动态变化,而过程的本质特征隐含在这种动态变化中难以提取,我们通过这种在宽度学习网络的输入层中嵌入了一种慢特征提取机制。这种机制提取过程中缓慢变化的特征,这种缓慢特征与过程的状态具有很强的拟合性。基于这种缓慢的特性,我们再进行关于它的非线性特征提取,最终实现一个过程监测。相对于传统的宽度学习网络,它在监测精度上提高了大概有8个百分点。

10.介绍一下你这个慢特征是什么?为什么要提取慢特征呢?

关于慢特征的解释:在输入层中构建慢特征窗口,每一个慢特征窗口基于两种技术获得,白化技术和广义特征分解技术来求解优化问题来实现。具体来说通过白化技术来去除特征之间的相关性。慢特征的提取是一个优化问题,目标函数是时间序列之间变化最慢。为了保证所提取的慢特征是有效的,对慢特征进行了三个条件约束,分别是零均值、单位方差和独立。这三个条件用于保证慢特征不是一个常量,且慢特征之间不存在信息冗余。这种优化问题可以用广义特征分解技术来是实现。最终我们可以获得映射慢特征的奇异矩阵,最终实现慢特征的计算。

11.你说的模型融合技术能介绍一下吗?

在我的科研项目中,还有我的实习经历中,确实做了很多相关一些模型融合,为什么要做模型融合,其实还是考虑到单一模型其实很多问题和不足。每个模型他们本身都有各自的优点和缺点,通过这种模型融合结构可以让他们构建一种新的增强模型。可以使他们的优点得到一个增强,缺点得到一个互补。因为我我选的模型融合的话,是考虑到模型之间在性能上有互补的。例如我们在论文中提出了有一种叫做增强型GRU。这种增强型GRU其实是结合了统计方法,如采用一种独立充分分析的方法,同时也结合了一些深度学习技术。传统的独立成熟分析方法虽然能提取到它的非高斯特性,但是他们在数据的非线性提取和时间相关性的提取方面存在不足。而GRU网络可以很好的提取非线性和时间相关性特征,但是它很难完成一个非高斯性特征的提取。但是我们通过这种将独立分成分析嵌入到GRU网络中的输入层,通过这种技术可以搭建一种增强性的GRU模型,它可以同时完成非线性、时间相关性的提取。这种挖掘到到数据中更加丰富的特征的模型会更加适合这种污水处理过程。

1.介绍一下你的增量学习

关于我们宽度学习的增量学习过程,我们采用这种方式的话,是通过横向添加神经元,获得一个新的输入层,我们通过一种方式可以计算出新的输入层的伪逆。基于新的输入层的伪逆和它的标签输出,通过它矩阵乘积运算就可以获得更新后的一个连接权重,接着来完成我们去模型一个更。所以在我们的增高学习过程中,其实只涉及到一个输入层的一个稳定计算,通过计算中稳定的话,其实我们并不需要记录下降,然后不需要多次带来获得,所以它在时间上是更快的。所以几乎它。可以选一个。我想在线更。

2.如果让你把增量学习添加到深度学习中,你会怎么操作?

3.如果数据量不足,此时你会怎么训练模型?

当面临数据量不足的情况时,可以考虑以下策略来训练模型,如数据增强(Data Augmentation): 对现有数据进行一些随机的变换,以生成更多的训练样本。在图像领域,可以进行旋转、缩放、翻转等操作;在文本领域,可以进行词语替换、删除或插入等变换。迁移学习(Transfer Learning): 利用在一个大规模数据集上训练过的预训练模型的特征,然后在目标任务上进行微调。这可以减轻数据量不足的问题,特别是在源任务和目标任务有相似特征的情况下。使用预训练模型: 使用在大规模数据集上预训练的模型,例如在自然语言处理中使用BERT或在计算机视觉中使用ImageNet上预训练的模型。这些模型已经学到了通用的特征,可以在小数据集上表现良好。
在我们的青霉素生产过程或者污水处理过程中,由于可以通过仿真平台生成海量的相关数据,因而并不存在这样的问题。不过我们为了增强模型的鲁棒性,我们会给数据加上不同程度的噪声,来丰富数据的多样性。

4.出现数据缺失怎么办

数据缺失问题可以通过多种方式进行缺失值的填充。如均值、中位数、众数填充: 使用整个特征的均值、中位数或众数填充缺失值。这对于数值型数据或者离散型数据都是有效的方法,尤其在数据分布不明显时。使用相似样本填充: 基于相似性的原则,使用其他样本的信息来填充缺失值。可以通过计算距离或相似性指标来找到最相似的样本进行填充。使用机器学习模型进行填充: 利用其他特征建立模型,预测缺失值。这可以是回归模型、决策树、随机森林等,具体选择模型取决于数据的性质。
在我们仿真平台生成的过程中其实并不存在数据缺失的现象。不过为了模拟真实的污水处理过程的数据缺失情况,我们对样本进行了删除,并通过构建机器学习模型对缺失值进行填充,最终实现故障检测的任务。

5.数据集有多少个特征?都有哪些?为什么要选择这些特征?

在我们的污水处理过程中的话,我们总共是关注18个特征,这些18个特征是并不在污水处理过程中的,它的五个反应池,还有最后沉淀池中。这18个特征包括如PH值,溶氧浓度,温度,还有它的营养物质浓度,还有如含氮浓度,含磷浓度等。针对特征选择方面,其实我们有两种方法,第一种我们也是参考了很多论文,一般他们因为其实在这个领域的话,其实有很多相关研究学者做了很多相关工作,我们所选择的这些特征,也是比较有代表性的特征。当前进行污水处理过程,无论是监测还是关键指标的测量,是他们所要关注的一些特征。基于我们选择了这些特征之后,我们还会特征进行一个预处理从中选择出更加关键一些特征,在这预处理方式,我们可能会通过一些白化处理,还有一些独立充分。分析或者一些因子分析方法,我们把关键特征进行提取出来,接着完成我们目前的下一步的一个训练。

6.介绍一下在GRU这篇论文中,你是怎么训练模型,怎么监测的?OICA是干什么用的,为什么需要提取非高斯特征。难道这种特征神经网络提取不到吗?

关于我怎么训练模型这个过程的话,我可以分两部分进行一个介绍,首先可以看一下我们的数据集,我们的数据集是一个时间样本序列数据,数据集总共有30批次,其中每批次有1344个样本,所以一共是40320个样本,每个样本有18个特征。然后每一个样本包含18个特征,同时也对应一个过程状态的标记,过程状态分为四种状态,分别是正常、污泥膨胀、毒性冲击和栖息地破坏四种故障,用独热编码的形式对这四种状态进行标记。当我们获得这些有标记的数据集之后,我们就可以基于这些已标记的数据集对架构好的模型进行有监督训练。模型的训练过程是基于一个反向传播的训练方法,通过每一层神经元的映射,如OICA层、GRU层、全连接层。将输入和输出频的误差反向传播到输入层,对通过多次迭代对层与层之间的连接权重进行一个更新,最终完成模型的一个收敛。其中OICA的目的是挖掘到数据中的非高斯特征。首先我们明白污水处理过程是一个多阶段的过程,过程的阶段与微生物的生长阶段息息相关,微生物分为生长期、稳定期和衰亡期,这也影响着污水处理过程的阶段。每个阶段内在稳定变化,但是阶段之间变化特征是相互迥异的,因此在整个周期内,它表现一种非高斯特性的变化。但是这种非高斯性隐藏在过程数据中,通过我们传统的深度网络,其实很难挖掘到非高斯变化特征,而OICA要做的就是把非高斯特征从数据中挖掘出来。OICA是通过构建独立原子来实现构建一个映射权重,最终实现数据到一个非高斯特征数据的一个映射。当你获得非高斯特征数据之后,我们用加入对非高斯特征继续模型的训练,这最终挖掘到数据中的非高斯特征。

7.我了解到时间序列都具有一定的时间相关性,对这一特征,你都是怎么处理的?

自回归模型(ARIMA)模型是一种常用的时间序列预测模型,它结合了自回归和滑动平均的成分。ARIMA模型的差分操作可以帮助处理时间序列的非平稳性。
使用时间特征: 将时间信息作为特征引入模型中。例如,将日期转换为星期几、月份、季度等,并利用这些特征来捕捉时间上的变化。
时滞思想:通过时滞思想对数据进行动态扩展。

LSTM和GRU等深度学习模型: 针对复杂的时间序列模式,可以考虑使用深度学习模型,如长短时记忆网络(LSTM)和门控循环单元(GRU)等。

19.你是怎么评估的,像污水处理厂的数据每天都会更新,数据量会越来越大,你们又是如何评估污水处理厂的状态呢?

对污水处理厂的话,我们是以14天进行一个周期进行一个评估的。一般在这十四天中,我们会更加关注后七天污水处理厂的运行情况。14天是因为就是一批次污水,它处理完成的整个流程的是14天,所以我们会更加关注这14天内它的一个表现情况。在这14天的话,我们是每个15分钟进行一个采样,所以14天总共的数据样本量是1344条。

12.你论文中这些模型代码部分请问是你自己写的吗?

在我论文中,其实我所提出的一些相关模型,例如宽度学习网络,还有我所提出的一些关于深度学习的一些增强方法,关于这部分增强方法,还有宽度学习系统的一些相关改进方法,这部分都是我通过matlab和python基于理论公式手写出来的。当然关于一些其他对比算法的话,我也借助了一些深度学习框架,如tensorflow等。因为其实这种深度学习框架给我们就是给我们应用一种人工智能技术提供了很便利的方式。在对比方法,我主要是通过一些相关的学术论文,还有一些网上网友相关的的介绍,我了解到模型的一些工作原理,了解到模型结构的细节。当然确实考虑到一些时间还有一些个人的精力,并不能将每一个对比方法都通过手撕代码来实现。未来也会不断督促自己可以熟练的将经典的网络模型自己搭建出来。

为什么要对青霉素过程进行检测,你给我讲一下什么是青霉素发酵过程

答案

为什么要对青霉素过程进行检测

青霉素是人类提纯的大规模用于临床的第一种抗生素其发酵过程是一典型的生化反应过程。青霉素发酵过程是青霉素产生菌在合适的培养基、pH 值、温度、空气流量、搅拌等发酵条件下进行生长和合成抗生素的代谢活动。

发酵过程是一个复杂的生化反应过程,在整个发酵过程中涉及到多个控制设备的相互配合,如果中间有一个设备出现了问题或者一些因素导致发酵过程偏离正常状态,则会导致发酵产品不达标,浪费了资源。如果没有检测则有可能导致不合格的青霉素流到市场上,对医药事业产生恶劣的影响。

青霉素的生产过程属于半间歇半连续的方式,是一种复杂的且含有较多相互耦合关系变量的化学反应过程,数据具有时变性、非线性、多维性和不确定性,很难建立精确的数学模型对其过程监控。影响青霉素生产率有诸多因素,主要有溶解氧饱和度、pH 值、菌丝生长速度.温度、菌丝浓度、基质浓度、菌丝形态等。因此,对青霉素发酵过程很难进行在线监测,给过程的优化、监测、建模与控制都带来了很大的困难。
补充:青霉素发酵过程是一个青霉素的制备过程,青霉素是一种抗生素,用于很多疾病的治疗过程,因此青霉素发酵过程具有重要的意义。但是在青霉素发酵过程中,由于控制设备或者发酵罐中的一些营养物质之间的不均衡可能导致一些故障的发生。在当前我们监测的青霉素发酵过程中,故障类型的话大概有三种,分别是搅拌装置故障,通风设置故障,底物流设置故障。然后还有一个搅拌处理的一个故障。当某些例如当通风装置发生故障时,可能会导致里面的一些氧气,一些氧氧气的指标下降,不利于青霉素一个发酵过程,最终导致青霉素发酵产品的一个不合格。如果这种不合格的产品流入市场,势必会给市场带来很大的一种危害,甚至可能会影响一些疾病的治疗,可能造成人员的伤亡。但是在青霉素发酵过程中如何检测故障其实有很大一些难度,因为我们对青霉素发酵过程进行一个采样,采样的得到一个数据的话,它具有三种特性,非线性、非高斯性,还有一个时间相关性。目前是很少有一种模型可以同时完成这三种特性的共同体,因为当前的模型其实都多少或存在一些问题。

其实生活中大部分的一些过程都处于一种高斯分布的一些特性,但是在青霉素发酵过程中,因为青霉素发酵过程中菌株的一个生长态具有一种阶段性。在每个阶段内。它是一个稳定的一个生长过程,但是阶段之间它的生长特性完全不太一样,因此导致在整个生长生发酵过程中,它表现正表现出一种非高斯的一种变化。同时我们的青霉素制备过程是一个菌株的一个发酵过程,这个发酵过程是一个复杂的生物和化学反应,这种生物和化学反应是一种非线性的过程,因而青霉素发酵过程的数据具有一种非线性特性。同时某些故障它们也相互影响,相互相关,最终导致我们整个系统的一个非线性系统,因此我们监测这个青霉素发酵过程的故障的话,要考虑数据的一个非线性特性。同时我们在青霉素发酵过程,它是一个,它是一个持续进行的一个过程,我们在这个过程进行一个采样,,我们会隔十分钟进行采样一次。因为青霉素发酵过程,它是一个在持续一个变化的过程,其实在我们样本期它具有很强的一种相关性,这种时序样本之间的相关性我们称为时间相关性。样本之间都是彼此相互影响,相关性很强的一种数据。如果我们能构建一种模型来完成数据中的非线性、非高斯性还有时间相关性的题的话,这将可以给我们准确的监测青霉素发酵过程一种故障提供更加一些数据特征方面的一些信息,有利于我们更加准确的监测这种过程的异常。

你给我讲一下什么是青霉素发酵过程
青霉素的发酵工艺主要有菌种选择、孢子制备、种子培养、发酵、产品分离结晶等几步。青霉素发酵工艺为二级补料分批发酵,青霉素抱子通过火焰接种至种子罐无菌培养基,在一定罐温、通气培养条件下发芽生长,经过定周期后青霉菌菌丝生长达到一定菌丝量,至对数生长未期,移入发酵罐无菌培养基培养。在发酵罐中给予一定温度、空气等生长环境,为了实现高水平的发酵单位,需要补入碳源、氨源及合成青霉素的前体物质等

怎么检测青霉素过程

青霉素发酵过程的检测涉及到数据采集、数据标注、模型训练和在线测试四个步骤:
数据采集:在仿真平台Pensim上设置青霉素发酵过程时间为400h,每间隔1h进行采样,每一个样本共计17个特征。分别是曝气速率、搅拌功率、底物流加速率、补料温度、底物浓度、溶解氧浓度、菌体浓度、产物浓度、反应器体积、二氧化碳浓度、PH值、温度、反应热、酸流加速率、碱流加速率、冷水流加速率、热水流加速率。
数据标注:所收集的数据共计四种状态,正常、通风速率故障、搅拌功率故障和底物流故障。对每一种状态我们采用独热编码的方式进行编码,即用0000代表正常,0100代表通风速率故障、0010代表搅拌速率故障,0001代表底物流速率故障。
模型训练:每一批次的数据的维度是400×17,数据对应的标签是400×4。为此我们搭建的模型输入层有17个神经元分别对应17个特征,最后输出有4个神经元分别对应四种状态。中间隐藏层对于不同的模型具有不同的结构。模型训练分为两个过程,前向传播和反向传播,前向传播是经过输入层、隐藏层和输出层我们获得到一种输出,将这一输出和期望输出(标签)之间的误差反向传播至输入层,采用梯度下降的方式调整神经元之间的连接权重,经过多次迭代完成模型的训练。
在线测试:在上一步骤(模型训练)中,我们获得了一个已经训练好的离线模型。所谓训练好的意思是模型中神经元之间的连接权重已经确定下来。当模型训练好之后,如果未来有在线数据过来时,基于离线模型的结构及连接权重,可以将数据映射到输出。由于我们采用的是独热编码训练的离线模型,所以在线数据中每一个样本对应的输出具有四个特征,将这四个值中最大值对应的位置作为当前模型的输出状态。

你是基于什么进行检测的?是基于图像、基于数据、基于什么传感器采集的,什么传感器、什么特征、重点关注什么

答:面试官您好,我们当前完成故障检测是基于在青霉素发酵过程(或者污水处理过程中)布置传感器的方式,我们的样本都是一个个时间序列样本。您提到的基于图像的方式我认为也是一种好的策略,我们可以在发酵过程中布置微型相机对发酵过程进行拍摄,之后我们采用图像分析算法完成特征提取,并最终判断当前样本的一个状态。我们并没有采用这种方式考虑一个原因是,基于图像进行故障检测会带来更大的计算量,更大的模型复杂度。同时图像中有很多冗余的、干扰的信息。考虑这些因素我们采用更加方面的传感器方法。我认为未来可以构建一种多模态模型可以基于时间序列样本,同时也可以接收图像、视频等信息作为辅助特征进行检测,我认为这样的措施也可以保证模型更加准确地完成故障检测。

青霉素发酵过程:青霉素发酵罐分布着在线传感器,如曝气速率、搅拌功率、底物流加速率、补料温度、底物浓度、溶解氧浓度、菌体浓度、产物浓度、反应器体积、二氧化碳浓度、PH值、温度、反应热、酸流加速率、碱流加速率、冷水流加速率、热水流加速率。通过这17个传感器,我们共计采集了17个发酵罐中的特征。(可溶解性不可生物降解性有机物、可溶解性易生物降解性有机物、溶解氧
可溶解性可生物降解性有机氮、氨氮、硝态氮、碱度、缓慢可生物降解性有机物、
颗粒状不可生物降解性有机物、生物质衰变产生的颗粒物质、活性自养生物量、
活性异养生物量、颗粒状可生物降解性有机氮,通过这13个传感器,我们共计采集了13个污水处理过程中的特征。我们主要是针对二沉池布置传感器,这主要是考虑到两个方面,第一,二沉池直接反应了污水处理厂的出水指标,是污水处理过程的最后一个环节,如果二沉池中出现了异常则可以直观地反映出污水处理过程的状态。第二,污泥膨胀是由于污泥没办法聚集到一起从而沉淀下来,而这种故障主要发生在二沉池中,通过二沉池中的特征可以直接反映出污泥膨胀的风险指数。)这些特征直接反应了发酵过程的状态。关于特征选择,我们应该尽可能的充分,因为这可以让模型学习到足够多的信息,但是由于特征之间可能存在冗余,所以我们会对17个特征进行进一步的特征提取,关于特征提取我们可以理解为数据的预处理过程。关于这个预处理有两个目的,1.为了减少测量噪声干扰和降低数据驱动模型的复杂度程度;2.对过程变量与故障的相关程度进行排序,确定故障的特征变量。为了减少测量噪声干扰和降低数据驱动模型的复杂度程度,需要对青霉素发酵过程变量进行分析,提取出与通风异常、搅拌异常和底物流异常相关的特征变量。根据采集的相关的过程变量数据信息,我们采用主成分分析方法对这些数据信息进行统计分析,将过程变量与故障的相关程度进行排序,确定故障相关性较强的特征变量。(需要对污水处理过程变量进行分析,提取出污泥膨胀特征变量。根据采集的污泥膨胀相关的过程变量数据信息,文中采用主成分分析方法对这些数据信息进行统计分析,将过程变量与污泥膨胀相关程度进行排序,确定污泥膨胀的特征变量。)

青霉素怎么分类的,你的过程变量是什么

答案:完成对青霉素发酵过程的分类共需要5个步骤,分别是数据采集、数据标注、数据预处理、模型训练(当前我们采用两种训练方式,反向传播和伪逆)、在线监测。下面我将对以上这5个步骤进行详细的解释。
数据采集:青霉素发酵罐是一个封闭的环境,我们需要通过控制一些变量来使得发酵罐处于一个适合青霉素发酵的环境,主要是通过控制热水和冷水的流量来控制发酵罐的温度,通过酸碱流入量来调整发酵罐的PH值,使得发酵罐适合青霉素的生长和发酵。当然我们也需要向发酵罐中添加一些底物如葡萄糖等营养物质来为青霉素的生长提供可靠的物质源。在发酵罐中我们布置了17个传感器负责采集发酵罐的状态,分别是曝气速率、搅拌功率、底物流加速率、补料温度、底物浓度、溶解氧浓度、菌体浓度、产物浓度、反应器体积、二氧化碳浓度、PH值、温度、反应热、酸流加速率、碱流加速率、冷水流加速率、热水流加速率。我们以400h为一个发酵周期,每隔1h对发酵罐进行采样一次,获得当前发酵罐的状态。通过这样的方式我们可以获得多个批次的数据,每一个批次的数据有400个样本,每一个样本的特征个数是17,即400×17。
数据标注:将收集到的数据基于当前的状态对其进行标注,所标注的内容共计4种情况,正常、通风异常、搅拌异常、底物流异常。标签是一个400×1的标签数据,但是考虑到模型训练的特点,要实现多分类的任务我们需要对标签进行编码。我们采用的编码方式是独热编码,用4位的二进制数来对标签进行编码,如用1000表示正常,0100表示通风异常,以此类推。独热编码的格式是只有一个二进制为1,其他位置都是0,这样可以很方便地把标签区分开来。这种编码方式也非常适合神经网络模型的训练。
数据预处理:对于采集到的数据我们可以直接进行训练,但是这样会存在一个问题。因为不同特征的量纲是不一样,如PH只在0~14内变化,而温度会在0度到100度变化,这样会导致模型在训练时受到温度的影响要大于PH的影响,让模型倾向于关注温度而忽略PH的影响,这是不符合实际情况的。为此,我们可以采用两种方式对数据进行预处理,分别是归一化和标准化。归一化可以调用matlab中的mapmaxmin函数将每一个特征的最大值用1表示,最小值用0表示,把所有的特征都映射到0到1范围内的量纲。标准化可以调用matlab中的zscore函数,将每一个特征映射到均值为0,方差为1的分布。经过上面这两种方式都可以降低量纲的影响。我们在程序中主要选用的是标准化方式对数据进行预处理。
模型训练:模型训练有两种方式可以完成,第一种是反向传播,第二种是伪逆。我们针对反向传播的方式选用GRU进行介绍。GRU是一个门控神经网络,神经元之间的权重是通过这样的方式进行获得的。首先随机化初始权重,经过预处理后的数据基于随机的初始权重进行映射获得一个输出值(如果输入是400×17,输出的格式应该是400×4),但是我们在数据标注是已经有一个期望的输出(400×4),首先我们对400×4进行解码,转换成400×1的矩阵,然后选用交叉熵损失函数获得实际输出与期望输出之间的误差,并将误差反向传播到输入层,在传播的过程中对连接权重进行更新,更新的方式是梯度下降。经过多次反向传播模型可以收敛到一个稳定值,此时我们获得了一个已经训练好的离线模型,基于离线模型可以完成下面在线监测的任务。
第二种是伪逆的计算方式。针对这一计算方式我们选用BLS进行介绍,BLS有输入层和输出层两层,输入层和输出层之间的连接权重的计算方式是这样的。预处理后的数据经过随机映射至输入层A,输出层用Y表示,Y是我们数据标注所获得的标签数据。连接权重W可以通过A的逆和Y的乘积来获得。Y和A都是已知的,因此我们可以很方便的获得连接权重W。但是这种计算方式只适合浅层网络。但是我有一个好的想法,我们可以在深层网络的最后一层采用伪逆的方式计算权重,实现深度和宽度网络思想的结合。我们目前也正在尝试中。
在线监测:离线模型训练完毕后可以投入到实际工况中进行实验,对青霉素发酵过程进行实时数据采集,并将采集到的数据基于离线训练时的预处理方法进行预处理操作,然后对预处理后的在线数据进行映射最终获得一个输出结果,然后对输出结果(这仍然是一个独热编码的格式)进行解码,这样我们就可以直观地看到一个确切的状态。基于这个状态我们可以了解到青霉素发酵过程运行的状态,然后及时采取相关措施来保证青霉素发酵过程的稳定运行。
5.污水*2

ENGRU、DOBLS,为什么选这个网络?

答案:

**ENGRU:**选用ENGRU进行青霉素发酵过程检测,主要是考虑了青霉素发酵过程中数据的三种特性,非高斯、非线性和时序相关性。我将对这三种特性进行分析,并谈论一下我所搭建的模型是如何解决三性问题。首先我们谈论一下数据的非高斯性。青霉素发酵过程分为停滞期、菌丝生长期、菌丝生长到次级代谢的转化期.代谢稳定期。不同阶段主导变量不一样,阶段内又相似的变化特征,阶段间的特征却大不相同。如果在整个周期上看的话,这也是一种非高斯过程。

在发酵的不同时期,既有菌体自身的生长、繁殖、老化,又有青霉素的合成及水解,再加上发酵时间周期长,菌体细胞本身的遗传变异,微生物对环境多因子变化的敏感性,原材料及种子质量不稳定等诸多原因导致过程始终处于动态之中,这进一步造成青霉素发酵过程的严重非线性和不确定性!。

所采集的数据是一种时间序列数据,样本和上下文之间具有很强的时序相关性。仅仅基于当前样本进行检测会出现特征提取不足导致的检测精度低的问题。如果我们想进一步提高检测模型的检测精度,所搭建的模型必须可以提取到更多时间步长的信息来完成检测任务。

ENGRU的解决办法:ENGRU网络的第一层是一个过完备独立成分分析层,该层采用快速迭代阈值算法解决这种原始数据到独立成分数据之间的映射(这是一个半正定问题)。所提取到的独立成分都是彼此独立的非高斯数据,隐藏层对这种非高斯数据进行下一步的特征提取。在这一过程中数据的非高斯特征可以有效地提取到。众所周知,GRU是一种循环神经网络,GRU网络中有两个门控,分别是重置门和更新门,这两个门可以完成对历史状态的遗忘和对当前输入状态的记忆。因而GRU可以有效地提取到时间序列数据中样本之间的相关性。在GRU单元中有两种非线性激活函数的使用,一种是sigmoid用于门的构建,一种是tanh函数用于完成数据的非线性映射,此外GRU单元的输出会经过一个非线性激活函数的映射。这些非线性激活函数的引入可以使得模型可以有效地提取数据中隐藏的非线性特征,提高模型的检测精度。

DOBLS:DOBLS同样也是为了解决上述的三性问题,但除此之外,DOBLS具备一种增量学习的方法来完成模型的在线更新,这种在线更新模型会更加适配这种这种流程工艺。实时调整模型的结构以匹配动态变化的过程。此外,DOBLS采用一种时滞方法将历史样本扩展到当前样本中,通过增加当前样本的特征的方式来使得模型可以提取到数据中的时间相关性。

7.往详细的去写(标题,贯穿每一句话)

标签怎么打的,标签怎么分类的,基于什么打标签,基于什么分类的

答案:见问题3

每一个传感器在哪一个池子里面都要讲明白(面试回答用我加粗的部分就可以啦)

污水处理平台适当的分布着在线传感器。在线传感器由十二部分组成:入水流量计,外部循环流量计,出水流量计,BOD检测仪器,COD检测仪器。DO浓度探针,pH计,温度仪,三个混合液悬浮固体(MLSS)检测仪器和氨氮(Ammoniac Nitrogen,NH4-N)检测仪器。因为没有直接的方式来连接传感器和PC计算机,因此设计了一个数据传输系统。所有的仪器在本研究中以连续或者在线测量的模式操作。抽样点的位置在表2-1中给出。监控的参数包括入水流量(Qm),外部循环流量(Qe),出水流量(Qw),DO,进水F/M,污泥回流比(Rr),SRT,温度(TEM),流入BOD,流入COD,NH4-N,流出液pH值(pH),MLSS1(在取样点3处的污泥浓度),MLSS2(在取样点5处的污泥浓度),MLSS3(在采样点6处的污泥浓度)。在线测量变量的信息呈现在表2-1中。DO,NH4-N,BOD,COD,TEM,pH,Qin,Qe,Qw,MLSS1,MLSS2,MLSS3的值通过在线仪器获得。由于通过USB端口导入数据存在时间消耗长并且效率低下的问题,采用一个数据记录器自动记录来自在线仪器的数据,并将数据直接导入计算机中。F/M,Rr,SRT的值从自动计算上述一些参数中获得。通过BOD,Q和MLSS1的值来计算F/M,使用Qi和Qa来计算Rr,而SRT则与MLSS1,MLSS2,MLSS3和Qw相关。
  • 1

上面这段文字我是看别人论文这么介绍的,如果你面试回答我认为你可以以下面的方式进行回答。
(我们程序中所设置的传感器都采集于二沉池中,在问题3中已经进行了介绍,在这里我会结合上面这段介绍进行陈述,首先你要先看一下下面这张图)
在这里插入图片描述监控的参数包括入水流量(Qin),外部循环流量(Qet),出水流量(Qw),DO,进水F/M,污泥回流比(Rr),SRT,温度(TEM),流入BOD,流入COD,NH4-N,流出液pH值(pH),MLSS1(在取样点3处的污泥浓度),MLSS2(在取样点5处的污泥浓度),MLSS3(在采样点6处的污泥浓度)。(上面这些过程变量没必要在面试时都讲出来,讲3~5个就行),我们需要检测到污水处理过程的整个工艺的参数,所以我们在五个反应池和一个二沉池中都布置了传感器,关于这些传感器的设置及选取我们也是参考了大量的相关领域的文献确定下来的,如水流量(Qin),外部循环流量(Qet),出水流量(Qw),以及三个好氧反应池中污泥浓度,二沉池中的酸碱度等数据。我们选取这些传感器作为模型的输入数据是基于两点,首先我们阅读了污水领域其他研究学者对污水处理过程机理的分析,这些过程变量和污泥膨胀故障具有较强的相关性,其次,这些变量容易采集,不存在较长的时间上的滞后。当我们采集到污水处理过程中的数据后我们也会对数据进行下一步的处理,主要会采用PCA的方法对数据进行降维,有两个好处,第一,去除掉特征的相关性,降低变量的冗余性。第二也可以降低模型训练的时间消耗。

下面是之前在网上看别人对传感器的相关介绍,其实有很多传感器,但是在面试的过程中没必要一一解释,我们应该把重点落实在程序中,因为我们是搞模型的,并不是搞硬件的。

答案:污水监测涉及到的参数种类繁多,其中影响较大的有水质COD、BOD、重金属离子、氨氮、电导率、PH值、余氯、六价铬、亚硝酸盐、水中油、水面油等,需要用水质传感器进行水质检测。COD是以化学方法测量水样中需要被氧化的还原性物质的量,即化学需氧量。废水、处理厂出水和受污染的水中,能被强氧化剂氧化的物质的氧当量。在河流污染和工业废水性质的研究以及废水处理厂的运营管理中,它是一个重要的而且能较快测定的有机物污染参数。BOD指水体中的有机物被好氧微生物分解成无机物这一过程中所消耗的溶解氧量,即生物需氧量。这一指标的大小间接反映了水体中有机污染物的多少,是表征水体污染程度的一项重要指标。精讯畅通COD、BOD检测仪采用分光光度法监测水体COD、BOD,橙色为BOD检测仪,蓝色为COD检测仪,两款产品均分为普通版和自动清洁版,自动清洁版可在监测完成后自动洗刷探头处污物,适用于污水浑水的检测。内置温度传感器,配合智能温度补偿功能,测量精度更高。该水质传感器采用了特殊的结构设计,放入溶液后可自动保持悬垂状态,减少因倾斜、或探头接触空气导致的测量误差。COD检测原理:研究发现有机物在254nm的紫外区有最大吸收值,因此可测量此波长的吸光值,悬浊物对900nm的可见光有吸收,而有机物对此的波段的光线吸收值几乎为零,因此可用波长为254nm和900nm两种光线照射溶液,通过测定两路光的吸收程度,即可得到溶液的COD值。BOD检测原理:通过紫外光激发水体中的色氨酸产生荧光,探测器检测荧光信号并由传感器内置的校正参数,将色氨酸荧光信号转化为与之相关的生化需氧量,从而测定溶液的BOD值。重金属废水(如含镉、铅、砷、汞、铬)是一类对环境污染最严重和人类危害最大的工业废水之一。大多数金属离子及其化合物易于被水中悬浮颗粒所吸附而沉淀于水底的沉积层中,长期污染水体。某些重金属及其化合物能在鱼类及其他水生生物体内以及农作物组织内富集、累积并参与生物圈循环。精讯畅通水溶液复合离子电极可检测溶液中多种离子的浓度,分为PVC膜和晶体膜两款,可测定铜、氟、汞、铅、镉等重金属离子和钾、钙、纳、硝酸根、硫酸根、高锰酸根等离子浓度,晶体膜适应性极佳,可在80℃环境下正常完成测量工作;测量时,复合离子电极的电极膜片浸入溶液后会产生电压,溶液浓度发生变化会引发电压变化,可通过检测电压来并通过相关算式计算出溶液浓度;测量灵敏度高、测定快、防水性好、试液用量少,同时可搭配手持式离子计,实现检测数据直接查看。过量的氨氮也会对生物界造成破坏。氨氮超量会造成水体富营养化,扰乱整个生物的生长环境,污染水系,增加水产品的危险,对人体健康带来一定威胁。如果水体污染的主要对象是氨氮,那么在其氧化分解的过程中需要消耗大量氧,导致水中溶解氧含量降低,威胁水生动物的正常生长,甚至会造成死亡。并且,氨氮的毒性远超过氨盐,含量超标会造成水生生物毒害。精讯畅通水溶液氨氮离子探头,主要应用于污水在线监测和地表水在线测量等场合,监测过程无需试剂,绿色无污染,可以使用手机远程控制,进行在线实时监测,其核心部件为一体式探头,可直接投入式安装,相比传统氨氮分析仪,更加经济环保,方便快捷。水溶液余氯离子传感器是一款智能在线化学分析仪器,该水质传感器使用的余氯电极是一种敞开式极谱型传感器,由三电极系统组成,包括参比电极、工作电极、对电极,此外还添加了温度补偿系统。实现精度高、成本低和维护量小的余氯监控系统。pH值对污水处理工作有重要影响。如污水处理通常会用到生化池,在好氧池中,一般好氧微生物的最佳pH值在6.5—9之间;pH<4.5时,真菌将占优势,引起污泥膨胀,在厌氧池中,在厌氧法处理废水的应用中由于产酸和产甲烷大多在同一构筑物内进行,为了维持平衡,避免过多的酸累积,应该让反应器内的pH值保持在6.5—7.5(最好是6.8—7.2)的范围内。水中油的污染危害十分严重,无论是对生态系统、土壤、或者是人体来说,都是需要我们注意的。例如在污水排放方面,水中油含量过高,会造成生物死亡,COD 过高。在电站等行业中,锅炉内水中油过高,会导致油质附着在受热表面上分解成一种导热系数很小的颗粒,危及到锅炉安全。及时做好水中油的检测可以很大程度的避免工业危险和环境污染。精讯畅通水中油传感器采用紫外荧光法监测水体中含油量,具有很高的稳定性、精确度、和灵活性,同时探头处还根据客户需求提供了搭配自动清洁设备的版本,防止探头被污物堵塞,适合在浑浊水体中使用。
  • 1

Transformer

transformer的核心部分是多头注意力机制,在介绍多头注意力机制之前我们先谈一下注意力机制。

注意力机制

注意力机制可以理解为一种权重分配,比如我们在看一张人物图片时我们会更加关注于图片中的人物,这意味着我们给图片中的人物分配了更多的注意力,而对人物的背景关注度较低,分配的注意力较小。

将图片中的注意力机制转移到我们的青霉素过程中来,在青霉素过程中我们所采集到的数据是一个时间样本,数据集是一个时间序列。在这个时间序列中如何理解我们的注意力呢?比如我们要监测第100个采样点的状态,之前的99个时间样本会不会影响第100个采样点的状态呢,答案是肯定的。为此,我们需要给之前的99个样本分配注意力,但是这99个样本对于第100个样本的影响是不一样的,我们需要用一种方法获得不同样本的注意力。

在transformer中我们使用的是一种自注意力机制。
在这里插入图片描述
上图是注意力的计算公式。在上图中Q、K、V是对一个样本的进行了三种映射获得的,Q、K、V都可以代表当前样本的全部特征,只是这Q、K、V有不同的任务。其中Q的全称叫做Query,K叫做Key,V叫做Vaule。Q需要主动和其他样本的K进行点积运算(需要除以一个常数,目的是对权重进行缩放),并经过softmax获得到一个0~1之间的值,这个0 ~ 1之间的值就是注意力机制所分配的权重。可以发现的是样本间的连接权重肯定小于样本内的连接权重,这种乘性注意力机制可以看做是计算样本间的相关系数的方式,相关系数越大所分配的注意力越高(我的理解)。经过上面的计算我们可以获得分配注意力机制后的样本特征信息Z。关于Q、K、V的计算公式可以见下图。
在这里插入图片描述
其中X代表样本,经过三种不同的映射,获得了对X的三种不同的表现形式。

多头注意力机制

上图可以理解为多头中的一个头。事实上,我们可以使用以同样的映射方式,使用多个映射权重将X映射到更多的空间中,从而对每一个X可以获得多个Q、K、V。那么我们构建多个Q、K、V有什么用处呢?
首先我们应该先谈一谈卷积神经网络,我们知道在卷积神经网络中我们经常会使用多个卷积核来完成卷积操作,这是因为每一个卷积核所发挥的作用常常是不一样的。比如拿一张人脸图片,有的卷积核更加关注于人脸的轮廓,有的关注于人脸的细节,五官等。虽然都是同一张图片,但是我们可以从多个角度来理解图片,从而增加模型对图片的理解能力,最终实现对图片的识别。如果我们理解了卷积核这个概念,我们就可以谈一谈为什么要使用多头了。
我们计算Q、K、V的目的是为了获得分配注意力机制后的样本特征信息Z。但是如果我们只设定一个头,那么我们只能获得一种注意力分配。这就有可能造成一个问题,如果我们的映射权重设定的不合适,那么最后获得样本特征信息Z可能就是不合适的。但是我们使用多头的方式,这种事情发生的风险就大大降低了。经过多头注意力机制,我们可以从多个角度来看一下注意力的分配。
在这里插入图片描述
在注意力机制中我们只获得了一个样本特征信息Z,但是通过多头注意力机制我们可以获得多个Z,如Z1,Z2,…,Z8(这是八个头的情况下)。
那么我们得到多个样本特征信息Z之后怎么办呢,这不是把维度都给增加大了吗?因此我们需要对其进行降维映射到原始的维度(即单个Z的维度),具体操作见下图。
在这里插入图片描述

编码器与解码器

相信大家对下面这个图一定不陌生吧,这是首次提出Transformer的作者在论文中用的图。我们前面讲述了那么一大堆的东西,到底是Transformer的哪一部分呢?请看图中红色框所标记的位置,对的,没错就是这里。
在这里插入图片描述
我们从上图中可以获得一个新的信息,那就是多头注意力机制是分配在编码器和解码器中的。那让我们先认识一下为什么需要编码和解码两部分呢?这主要是在NLP任务中,比如在机器翻译任务中,要将中文翻译成英文,需要怎么做呢?电脑可是不认识中文,也不认识英文的,它只认识一堆又一堆的数。编码器部分就是为了将中文编码成句向量,句向量就是一堆数字,这就是编码的过程。解码的过程就是将句向量转换成英文的过程。

但是你可以发现一个奇怪的现象,在编码器中的多头注意力机制和解码器中的多头注意力机制是不一样的(先不谈mask)。在解码器中我们只要关于解码器注意力机制中的一个向量信息,那就是Q。K和V并不需要。在解码器中计算注意力机制所采用的K和V仍然是编码器中注意力机制的K和V。这是由于编码器中的K和V已经保存了很多关于字向量的信息了,用解码器中的Q去和编码器中的K和V做匹配,最终让模型理解文字信息。

关于mask的解释:在解码器中有一个mask机制,这是一种对未来信息进行掩盖的一种机制。为什么在解码器中需要对未来的信息进行掩盖,而在编码器中就不需要呢?编码器是离线训练的一个过程,这是我们为了让模型学习到上下文之间的关系,所以我们希望模型能学习到更多的信息,所以我们不进行mask处理。另一方面对于离线数据我们也可以知道未来的数据信息。但是在解码器中就不行了,首先解码器的输出是我们待翻译的数据(在青霉素发酵过程或者污水处理过程中就是我们的在线数据),这时我们是不知道未来的情况,逻辑上模型是看不到未来的样本,但是自注意力我们从公式就可以看出(公式是第一个图片),它会自动对上下文都分配注意力权重。这是不符合逻辑的。所以我们对未来样本进行了mask标记,使得模型看不到未来的样本特征,只能看一个mask字符。

(关于mask进行一个补充,也就是我们在建模时是将编码器的多头注意力机制换成了mask的多头注意力机制,也就是无论在训练还是在测试的阶段模型都只关注于已经发生的样本,对未发生的样本不关注,这也符合我们这个物理世界的实际情况。)

残差连接

在transformer图中(也就是上面最近的那个图中)有一个add&norm模块,可以看到该模块有两个输入,一个是feedforward的输入,一个是feedforward的输出,这也就是传说中的残差连接啦。为什么要有add&norm模块呢,主要的目的还是为了加速模型的训练,防止出现梯度消失的问题。其中norm是一种标准化处理,transformer中选用的标准化处理方式不是BatchNorm而是Layernorm(关于这俩的区别请见https://blog.csdn.net/fanchao_/article/details/134000246),当然这不一定是固定的,我认为在我们青霉素或者污水过程中使用Batchnorm会更加合适。NLP中选用Layernorm的原因是考虑到这种非结,化数据可能会出现长度不一致的情况,这种情况用Batchnorm就比较难处理了,但是在我们污水数据中不存在长度不一致的情况,所以我们可以使用batchnorm(不过在这块我们没有修改,也是采用的layernorm)。

请你解释一下你怎么用transformer进行污水处理过程监测的?为什么要选用transformer呢?

答案:选用transformer其实有两个原因。第一,transformer是一个很热的模型,一时间很多领域都在使用transformer来完成相关任务。例如在图像领域出现swin-transformer。而在污水处理过程中据我们当时调研并没有任何与transformer相关的论文,所以其实有一部分原因是想蹭transformer的热度。第二,还是考虑污水处理过程数据是一个时间序列数据,样本之间具有很强的时间相关性。当前虽然有如RNN、LSTM等模型用于污水处理过程,但是这些模型仍然是一种串行模型,没办法完成并行训练,对现在很多可用的GPU资源难以高效地使用。这些模型只在一个空间进行时间序列相关性的提取,但是这个空间所提取的时间序列相关性也存在局限,并不一定能能够真实的反映出污水处理过程中的时序特性。但是呢,如果只是简单的搬移或者将这种语言模型直接应用于污水是不可以的。我们必须结合我们的污水情况对transformer进行调整。我们做了两个调整。众所周知,transformer的核心部分是多头注意力机制,这能够有效地提取到时序相关性,同时也可以从多个空间完成监测任务,降低了RNN、LSTM单一空间可能存在的不确定性。因此,我们所构建的transformer是原始论文中transformer的编码器部分。同时考虑到污水处理过程的实际情况,我们对多头注意力机制采用mask机制进行了掩盖,这一目的主要为了使得模型关注于历史数据,而不要去关注未来数据,因为未来数据没有发生,我们不能预先知道。这样的mask机制也使得transformer模型更加复合污水处理过程的实际情况。

那你接触过transformer,那你了解GPT或者Bert这种语言模型吗?

GPT和Bert都是transformer的衍生版本。GPT是transformer的解码器部分,而Bert可以看作是transformer的编码器部分。GPT和Bert中都用到了多头注意力机制和残差连接。不同的是GPT是单向的,它采用的还是RNN那种机制,不能完成并行处理,必须在上一个样本处理完成之后才可以处理当前的样本。而Bert是一种双向模型,它完全复刻了Transformer的编码器部分。下图是GPT和Bert。
在这里插入图片描述

面试提问环节

当前有很多时间序列模型,为什么要选择宽度学习系统呢?这个模型是时序模型吗?

答案:面试官您好,时序模型在污水处理过程中是一个常用的模型,如许多RNN、LSTM、GRU、ARIMA等方法都取得了一定的检测效果。性能有很多的可取之处。我们之所以选择宽度学习进行过程监测是考虑到实际污水处理厂的入水是持续不断的,入水的指标不能预测,因而入水数据具有很大的可变性。再加上天气、温度等环境的影响,整个环境是一个动态变化的状态。上述的离线模型并不能很好地适应这种动态变化的环境,选用宽度学习系统可以采用增量学习的方式在线更新模型,几乎可以实现模型与环境的实时匹配,因而当污水处理环境发生了变化,模型可以采取有效的更新方式快速完成模型的更新。

Python代码操作流程

pycharm版

1.新建项目或者打开项目(程序所在的文件夹)
2.在这里插入图片描述
其中右下角绿色框代表了当前解释器,我们应该选择我们所需环境的解释器,一般这种情况下我们会选择虚拟环境下的解释器。(如果要切换解释器的话,可以点击在这里插入图片描述

在这里插入图片描述
这里可以切换解释器。
在这里插入图片描述
在这里选择我们的解释器。
4.如果运行过程中出现“no modle”的错误,可以使用’pip install 名字‘进行安装

机器学习相关问题

介绍一个K近邻和Kmeans的区别

从以下几个方面进行回答:

任务类型

k均值(k-means): 是一种聚类算法,用于将数据集中的样本划分为不同的簇,使得同一簇内的样本相似度较高,不同簇之间的相似度较低。
k近邻(k-nearest neighbors): 是一种分类(或回归)算法,基于样本之间的距离,将测试样本分配给训练样本中距离最近的k个邻居,然后通过多数投票或加权投票确定测试样本的类别。
任务目标

k均值(k-means): 目标是通过最小化簇内样本的方差或簇中心与簇内样本的距离之和,来实现簇的紧凑性和簇间的分离性。
k近邻(k-nearest neighbors): 目标是通过选择k个最近邻的样本,利用它们的标签进行分类或回归预测。
无监督 vs. 有监督:

k均值(k-means): 无监督学习算法,因为它不依赖于事先标记的训练数据。
k近邻(k-nearest neighbors): 有监督学习算法,因为它需要使用带有标签的训练数据。
模型复杂度

k均值(k-means): 通常是一个迭代过程,通过反复更新簇中心来最小化目标函数。
k近邻(k-nearest neighbors): 模型复杂度较低,因为它只需要存储训练数据,并在预测时计算距离。
对异常值的敏感性

k均值(k-means): 对异常值较为敏感,因为它受到簇内样本方差的影响。
k近邻(k-nearest neighbors): 对异常值也比较敏感,因为它的预测结果依赖于最近邻居的标签,异常值可能会影响距离计算。

可以参考:http://www.manongjc.com/article/47199.html
**K近邻**:
K-近邻算法(KNN)概述 (有监督算法,分类算法)
对KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应的类别就是K个数据中出现次数最多的那个分类,其算法的描述为:
1)计算测试数据与各个训练数据之间的距离;
2)按照距离的递增关系进行排序;
3)选取距离最小的K个点;
4)确定前K个点所在类别的出现频率;
5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。
**K均值**:
 k-means算法是一种简单的迭代型聚类算法,采用距离作为相似性指标,从而发现给定数据集中的K个类,
K-means是一个反复迭代的过程,算法分为四个步骤:
1) 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;
2) 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;
3) 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;
4) 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)。

## 介绍一下Sigmoid和Softmax的区别,以及各自适用于什么环境
答案:sigmoid常用语二分裂,Softmax可以用于多分类的情况。sigmoid是一个s函数,可以通过设定某一界限,当超过这一界限则判断为正样本,否则判断为负样本。从而实现二分类。
softmax是一个计算每一个神经元输出的概率的函数,该函数可以为每一个神经元输出一个概率值,我们一般会选取概率值最大的那个神经元的位置作为分类的结果。从而实现多分类。当然softmax也可以用于二分类,但更多我们使用softmax完成多分类,sigmoid完成二分类。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

8. 介绍一下adam相较于sgd做了哪些改进?

ADAM全称是用自适应学习算法,SGD的话是有随机梯度下降算法,自适应算法的话,在随机梯度算法的基础上做了一些改进,可以总结为包括三种改进方式。第一针对学习率的进行调整,随机梯度下降算法,它采用的是固定学习率的一个更新方式,就是在每一个参数,它们的学习率都是统一的,但是我们在自身的学习方法中,每个参数都有自己的学习率。第二方面的话,在ADAM中有了一个动量项,这种动量项可以帮助算法在优化过程中更快的进行收敛,并且有助于处于那种稀疏特征。第三方面的话,是ADAM中引入了一个二次去估计的方法,这个二阶矩估计可以看做是对梯度变化的方向进行了估计,通过这种方法可以进行一个学习的有效的一个调整。ADAM通过上述这种三种肯定方式,使得模型的训练更加高效和稳定。

9.你都学习过哪些关于深度学习的知识?

深度学习模型的训练过程,梯度下降方法。优化器的选择、激活函数的选择、模拟退火方法、注意力机制等方法。在这个过程中我也认识到很多深度学习模型,如RNN、LSTM、GRU、SAE、CNN、Transformer、Bert等模型,通过对模型原理的分析我对深度学习有了更深刻的认识。

6.你接触过resnet吗?

对resnet有过一定的了解。有过两次使用resnet的经历,第一次是研究生课程神经网络与原理中使用resnet-18完成手写字体识别的任务。第二次是在实习时构建了基于resnet-50的对比学习模型完成人脸图片的分类。ResNet18 网络是指是带有权重的 18层,这18层包括卷积层和全连接层。resnet本身是一个卷积神经网络,但通过残差连接的方式对模型进行了改进。残差网络的目的是为了解决深层网络存在模型退化的问题(即输入发生变化但是在深层神经元的输出并没有受到较大的影响,即不同输入对应类似的输出),以及深度网络在训练时出现的梯度消失问题。通过残差连接的引入使得误差可以直接反馈到前一层网络,从而有效地降低梯度消失带来的风险。

13.你能介绍一下常用的优化器,他们有什么不同呢?

在机器学习和深度学习中,优化器是用于最小化(或最大化)损失函数的算法。我可以就一些经典的优化器进行一个简单的介绍。随机梯度下降(SGD) 是最基础的优化算法之一,通过计算损失函数对参数的梯度,并沿着梯度的负方向更新参数。
批量梯度下降(BGD) 与SGD不同,BGD使用整个训练数据集计算梯度。这样的做法可能更稳定,但在大型数据集上的计算代价较高。小批量梯度下降(Mini-Batch Gradient Descent)是上述SGD和BGD的折中,每次更新时使用一小部分训练数据。通常在实践中使用,因为它兼具计算效率和较好的收敛性。

14.你了解反向传播吗?公式有自己推导过吗?

反向传播是一种在神经网络中用于训练模型的优化算法。它通过计算损失函数对网络参数的梯度,并使用梯度下降或其他优化算法来调整参数,从而最小化损失函数。

以下是反向传播的基本步骤(面试时只要把四个标题说出来就行啦,不用讲细节):

前向传播(Forward Propagation): 在训练数据上进行前向传播,通过神经网络计算模型的预测值。

计算损失(Compute Loss): 计算预测值与实际标签之间的损失,表示模型的性能差异。

反向传播(Backward Propagation): 通过链式法则,计算损失函数对每个参数的梯度。链式法则是微积分中的一条规则,用于计算复合函数的导数。

更新参数(Update Parameters): 使用梯度下降或其他优化算法,沿着梯度的反方向更新模型的参数,以降低损失函数的值。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这一过程在整个训练集上迭代多次,直到模型收敛到一个合适的状态。反向传播是通过有效地传递误差信号来调整网络参数,以提高模型的性能。

15.我看你不是学计算机的,那这些关于深度学习的知识你是怎么学习的?

关于学生的学习的知识的话,其实我主要是三种渠道进行一个学习,第一的话是网上有很多优质的一些资源课程,比如在B站上有很多公开课程,但是我主要是就会浏览更多的是。中国大学慕课那里面有很多一些大学教授相关的一些课程,我觉得这些课程都是就是质量会比较高的一些课程,通过在慕课中的学习,我对机器学习、深度学习,还有一些统计模型都进行一个系统学习,也了解到关于模型训练方面的知识,例如反向传播及优化器的选择。
第二种渠道的话,是通过一些网友网上进行一些博客的一些分享,当然其实这在这方面的话,博客分享其实就是内容会参差不齐,甚至也会存在一些错误的一些内容。我会借鉴他们一些建议和内容,当然也会结合一些自自己的理解,然后对他们的需求进行一个就是校验吧。
第三种的话,就是在研究生期间的话,在整个课题组还有与老师的沟通,是一个很高效的一个学习方式,因为在这个过程既既有知识的传输,又有自己自学技能的一个体现。我老师他本身就是在计算机系任任教的一一个老师,他对整个深度学习,机器学习有一个系统的认知。他经常会提出一些比较建设性,比较专业性的一些建议,也通过和他一些交流,让我对整个模型有了更加全面的一些认识。

16.numpy、pandas、matplotlib这些工具箱你会使用吗?

17.如果给你一个项目,目标是什么其实并不清晰,怎么评价也知道,需求也很模糊,请问对于这个项目你会怎么开展?

关于如何开展一个目标更清晰的一个项目的话,首先的话,可能我会分为一下五个步骤进行,一个就是一个整体,一个设计,首先我们要明确我们的项目目标市场,可以通过和领导和同事进行沟通。首先要。知道我们目标,我们期望一个结果啊,虽然其实很多,但是我们应该有个方向,首先就是要明确我们的方向在哪里,在这确认我这个方向之后,我们应该可以参考很多文献,针对这些文献我们可以制定相应的项目。项目的一个实施计划,同时我们要在这个过程中不断进行一个反馈,进行一个进行一个向向上反馈,然后不断看上面一些见解,或者提供一些新的需求,我们要改变我们的计划,同时也要。完成一些阶段性成果的话,也要进行一个展示,看是否方向有偏离我们整体的方向。那也就是要在人的承诺中时刻保持沟通,尽量我们在一个大体方向也追向前进。

明确项目目标: 首先,与项目相关的各方进行沟通,包括项目发起人、利益相关者和团队成员。尽量从他们那里获取更多信息,以明确项目的目标和期望成果。
制定项目计划: 根据初步了解的信息,制定一个灵活的项目计划。这个计划应该包括项目的阶段性目标、关键任务和预计的时间表。同时,要明确项目的优先级和资源需求。
进行需求分析: 虽然需求模糊,但可以尝试进行初步的需求分析。通过与相关人员交流、研究类似项目的经验,收集更多信息,以便更好地理解项目的要求。
制定临时目标: 在明确项目整体目标之前,可以制定一些短期、可达到的目标。这些目标可以帮助项目团队保持动力和前进的方向,并且在实现这些目标的过程中,更多地了解项目的需求和方向。
敏捷开发方法: 考虑使用敏捷开发方法,例如Scrum。敏捷方法允许团队在不断迭代的过程中逐渐明确项目需求,同时及时调整和改善项目计划。
持续沟通: 与项目相关的各方要保持持续的沟通。定期举行会议,确保项目的进展和方向得到及时的反馈,以便及时调整和纠正。
风险管理: 对于目标不明确的项目,风险可能更高。因此,在项目计划中加入风险评估和管理步骤,及时应对可能的问题。
迭代优化: 随着项目的进行,不断进行迭代优化。根据学到的经验和新的信息,及时调整项目计划和方向。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

你怎么理解深度学习?

回答:面试官您好,深度学习是一种人工智能(AI)方法,用于教计算机以受人脑启发的方式处理数据。深度学习模型可以识别图片、文本、声音和其他数据中的复杂模式,从而生成准确的见解和预测(官方定义)。(开始我的回答)深度学习是一种人工神经网络技术,在谈论深度学习之前我们先了解一下浅层神经网络,假设现在我们有一个两层的神经网络模型,输入层和输出层。输入层表示特征,输出层是对输入层的数据进行映射。输出层是由神经元组成的,其中每一个神经元上需要具有一个非线性激活函数,激活函数的目的是让模型学习到数据中的非线性特征。输出层中每一个神经元都和输入层中的每一个神经元相连接,这就是一种常见的全连接层的方式。我们通过反向传播的方式可以获得稳定的连接权重,这些连接权重代表了模型的记忆,这也就是模型从数据中学习到的知识。这是浅层神经网络。深度学习是在浅层网络中添加隐藏层,我们可以添加多个隐藏层,这样模型可以拟合出更加复杂的函数来。如果深度学习算法试图对动物图像进行分类,则其每个隐藏层都会处理动物的不同特征并尝试对其进行准确的分类(摘抄)。这种深度学习算法是仿照人脑建模的神经网络。例如,人脑包含数百万个相互关联的神经元,它们协同工作以学习和处理信息。同样,深度学习神经网络(或人工神经网络)是由在计算机内部协同工作的多层人工神经元组成的。

python相关问题

你能解释一下装饰器吗

当我们需要将函数作为参数传递给另一个函数时,可以使用装饰器的功能。
套娃神器:
其实很好理解,我在写 Function 的时候,很常在一个 Function 中调用另一个做些处理。比如下面这样。

def inner_fn(name):
    print(name+"say I'm in")

def outer_fn(name):
    inner_fn(name)
    print(name+"say I'm out")

outer_fn("mofanpy")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以及这样:

def inner_pre_fn(name):
    print(name+"say I'm in_pre")

def inner_post_fn(name):
    print(name+"say I'm in_post")

def outer_fn(name):
    inner_pre_fn(name)
    print(name+"say I'm out")
    inner_post_fn(name)

outer_fn("mofanpy")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

那么这些时候,都存在一个共性,我要对很多不同的 function 做同样的前后处理,这时,就是 Decorator 装饰器有用的时候了。

def decorator(fn):
    def wrapper(name):
        print(name+"say I'm in")    # 这是我的前处理
        return fn(name)
    return wrapper

@decorator
def outer_fn(name):
    print(name+"say I'm out")

outer_fn("mofanpy")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

参考:https://mofanpy.com/tutorials/python-basic/interactive-python/decorator

为什么要有迭代器和生成器

迭代器
Python中一个实现 iter 方法和 next 方法的类对象,就是选代器。
是一个能记住遍历位置的对象,遍历时只能往前,不能后退。迭代器常用方法有 iter()和 next().
把一个类作为迭代器使用需要在类中实现两个函数: iter() 和__next__().
生成器
Python 中使用了 yield 的函数称为生成器,生成器函数返回一个迭代器。在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值,并在下一次执行 next()方法时从当前位置继续运行。
生成器函数自动实现了迭代器协议,能更方便地实现。

二者区别
1.选代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的
2.在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。
3.生成器是只能遍历一次的。
为什么使用生成器
Python使用生成器对延迟操作提供了支持。在需要的时候才产生结果,而不是立即产生结果。
1、节省资源消耗,和声明序列不同的是生成器在不使用的时候几乎不占内存,也没有声明计算过程!
2、使用的时候,生成器是随用随生成,用完即刻释放,非常高效!
3、可在单线程下实现并发运算处理效果。
yeild 与 return的区别
相同点: 都是返回函数执行的结果
不同点: return 在返回结果后结束函数的运行,而ield 则是让函数变成一个生成器,生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

迭代器

class FibonacciIterator:
    def __init__(self, n):
        self.n = n
        self.a, self.b = 0, 1
        self.count = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.count < self.n:
            result = self.a
            self.a, self.b = self.b, self.a + self.b
            self.count += 1
            return result
        else:
            raise StopIteration

fibonacci_iter = FibonacciIterator(5)
for num in fibonacci_iter:
    print(num)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

在这个示例中,FibonacciIterator是一个自定义的迭代器类,它实现了__iter__()和__next__()方法。我们需要手动管理斐波那契数列的状态和结束条件。
生成器

def fibonacci_generator(n):
    a, b = 0, 1
    count = 0
    while count < n:
        yield a
        a, b = b, a + b
        count += 1

fibonacci_gen = fibonacci_generator(5)
for num in fibonacci_gen:
    print(num)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这个示例中,FibonacciIterator是一个自定义的迭代器类,它实现了__iter__()和__next__()方法。我们需要手动管理斐波那契数列的状态和结束条件。

Python里面都有哪些数据结构

列表(List):有序的可变序列,可以包含不同类型的元素。列表使用方括号 [] 表示,例如 my_list = [1, 2, 3]。

元组(Tuple):有序的不可变序列,用圆括号 () 表示,例如 my_tuple = (1, 2, 3)。

字典(Dictionary):无序的键-值对集合,使用花括号 {} 表示,例如 my_dict = {“name”: “John”, “age”: 30}。

集合(Set):无序且不包含重复元素的集合,用大括号 {} 或 set() 构造,例如 my_set = {1, 2, 3}。

字符串(String):用于表示文本数据的不可变序列,用单引号 ’ ’ 或双引号 " " 包围,例如 my_string = “Hello, World”。

介绍一下快速排序

快速排序(Quick Sort)是一种常用的排序算法,它是一种分治策略的排序方法,通常用递归的方式实现。这个算法的基本思想是选择一个基准元素,然后将数组中的元素分为两部分,使得左边的元素都小于基准元素,右边的元素都大于基准元素。然后递归地对这两部分进行排序,直到整个数组有序。

面试时可能会问你快速排序的终止条件是啥:数组的长度小于等于1时。

代码:

def quick_sort(arr):
    if len(arr) <= 1:
        return arr

    pivot = arr[0]  # 选择第一个元素作为基准
    left = [x for x in arr[1:] if x <= pivot]  # 比基准小的元素放在左边
    right = [x for x in arr[1:] if x > pivot]  # 比基准大的元素放在右边

    # 递归地对左右两部分进行排序
    left_sorted = quick_sort(left)
    right_sorted = quick_sort(right)

    # 将左半部分、基准元素和右半部分拼接在一起
    return left_sorted + [pivot] + right_sorted

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

当一个函数有不确定的输入参数时,应该怎么定义函数中的输入参数

使用*args:*args 是一个特殊的参数,它允许函数接受任意数量的位置参数。这些参数会以元组的形式传递给函数,你可以在函数内部迭代和处理这些参数。

def my_function(*args):
    for arg in args:
        print(arg)

my_function(1, 2, 3, 4, 5)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用**kwargs:**kwargs 也是一个特殊的参数,它允许函数接受任意数量的关键字参数。这些参数会以字典的形式传递给函数,你可以在函数内部使用字典的方法来处理这些参数。

def my_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

my_function(name="Alice", age=30, city="New York")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

结合使用args 和 **kwargs:你也可以在函数定义中同时使用args 和 **kwargs,以接受任意数量的位置参数和关键字参数。

def my_function(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

my_function(1, 2, 3, name="Alice", age=30, city="New York")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

介绍一下重载和重写

关于numpy和pandas,你面试的时候你可以说你都用过

一、Numpy与Pandas是什么?
Numpy(Numerical Python) 是 Python语言的一个第三方库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Numpy是一个运行速度非常快的数学库,主要用于数组计算。

Pandas是基于NumPy数组构建的,也是Python语言的第三方库,Pandas使数据预处理、清洗、分析工作变得更快更简单,主要用于数据分析。

Pandas是专门为处理表格和混杂数据设计的,相当于Python的Excel,而Numpy更适合处理统一的数组数据。

Numpy和Pandas都是第三方库,需要预先安装好后才能导入使用,如果安装了Anaconda,则不必另外安装(因为Anaconda会自动安装很多数据分析用的第三方库)。

传统机器学习方法补充:

线性回归模型

线性回归模型是机器学习中最基础的模型之一,它是一种用于预测连续变量的监督学习算法。其基本思想是通过对变量之间的线性关系进行建模,来预测目标变量的值。线性回归模型的核心是找到一条最优的直线,使得预测值与实际值之间的误差最小。

线性回归模型的优点是简单易懂,易于实现和解释,适用于大多数数据集。但是,它的缺点是对非线性关系的建模能力较弱,对异常值和噪声敏感。

逻辑回归模型

逻辑回归模型是一种用于预测二元变量的监督学习算法。它通过对变量之间的线性关系进行建模,并使用逻辑函数将结果映射到0和1之间,来预测目标变量的值。逻辑回归模型的核心是找到一组最优的参数,使得预测值与实际值之间的误差最小。

逻辑回归模型的优点是简单易懂,易于实现和解释,适用于大多数数据集。但是,它的缺点是对非线性关系的建模能力较弱,对异常值和噪声敏感。

支持向量机

引入松弛变量:支持向量机的优化问题可以表达为一个带有约束的凸二次规划问题。在处理线性不可分的情况时,引入松弛变量可以允许一些样本点在错误的一侧。
在这里插入图片描述
对偶问题还是没有看懂???

决策树模型

常见的决策树算法包括:

  • 分类及回归树(CART)[21],
  • ID3算法[11],
  • C4.5算法[22],
  • 决策树桩(Decision Stump)[23]等。
    这些算法的基本流程都比较类似,包括划分选择和剪枝处理两个基本步骤。

划分选择:常用的准则有:信息增益、增益率、基尼系数等。

信息增益:所谓信息增益,指的是在某个节点上,用特征j对数据集D进行划分得到的样本集合的纯度提升的程度。

决策树剪枝的目的:剪枝处理要解决的问题是抑制过拟合。
剪枝处理有预剪枝和后剪枝之分:

  • 预剪枝指的是在决策树生成过程中,对每个节点在划分前先进行估计,如果当前节点的划分不能带来决策树泛化性能的提升(通常可以通过一个交叉验证集来评估泛化能力),则停止划分并且将当前节点标记为叶子节点;
  • 后剪枝指的是先从训练集中生成一棵完整的决策树,然后自底向上地考察去掉每个节点(即将该节点及其子树合并成为一个叶子节点)以后泛化能力是否有所提高,若有提高,则进行剪枝。

为什么要进行boosting?
,由于学习任务难度大,单棵决策树的性能会捉襟见肘,这时人们常常会使用集成学习来提升最终的学习能力。集成学习有很多方法,如Bagging[24]、Boosting[25]等。

Boosting在抵抗过拟合方面有非常好的表现,也就是说**,随着训练过程的推进,即便在训练集上已经把误差降到0,更多的迭代还是可以提高模型在测试集上的性能(间隔定理(Margin Theory))。**

Boosting的基本思路是先训练出一个弱学习器图片,再根据弱学习器的表现对训练样本的分布进行调整,使得原来弱学习器无法搞定的错误样本在后续的学习过程中得到更多的关注,然后再根据调整后的样本分布来训练下一个弱学习器图片。
最终的预测模型是所有这些弱学习器的加权求和在这里插入图片描述
GBDT既可以用于分类模型,也可以用于回归模型。在分类模型中,GBDT通过训练多个决策树来预测样本的类别,每个决策树的输出是概率值或者类别标签。在回归模型中,GBDT通过训练多个决策树来预测目标变量的值,每个决策树的输出是一个实数值。

随机森林模型

随机森林模型是一种用于预测离散或连续变量的监督学习算法。它通过随机选择特征和数据集的子集,来构建多个决策树模型,并将它们的预测结果进行平均或投票,来提高预测的准确性。
随机森林模型的优点是能够处理非线性关系和缺失值,具有较高的准确性和鲁棒性。但是,它的缺点是模型复杂度较高,需要较长的训练时间和较大的存储空间。

请注意分类和回归时的区别:
将所有构建的决策树组合在一起,形成随机森林。对于分类问题,通过投票来确定最终的预测结果;对于回归问题,取各树预测结果的平均值。

朴素贝叶斯模型

朴素贝叶斯模型是一种用于预测离散变量的监督学习算法。它通过假设所有特征之间相互独立,来计算每个类别的概率,并选取概率最大的类别作为预测结果。

朴素贝叶斯模型的优点是简单易懂,易于实现和解释,适用于大多数数据集。但是,它的缺点是对非独立特征和连续变量的处理能力较差,对异常值和噪声敏感。

K近邻模型

K近邻模型是一种用于预测离散或连续变量的监督学习算法。它通过找到与目标变量最相似的K个数据点,来预测目标变量的值。K近邻模型的核心是选择合适的距离度量和K值。

K近邻模型的优点是简单易懂,易于实现和解释,适用于大多数数据集。但是,它的缺点是对高维数据和大规模数据集的处理能力较差,对异常值和噪声敏感。

常用的距离度量方式:(面试的时候能提到两到三种就行,欧氏距离、曼哈顿距离和余弦相似度)

K近邻算法(K-Nearest Neighbors,KNN)是一种基本的分类和回归方法,它根据数据点在特征空间中的邻近程度进行预测。在KNN中,距离度量是决定邻近程度的关键因素。以下是KNN中常用的距离度量方式:

欧氏距离(Euclidean Distance):
  • 欧氏距离是最常见的距离度量方式,表示在多维空间中两点之间的直线距离。对于两个点 (P=(p_1, p_2, …, p_n)) 和 (Q=(q_1, q_2, …, q_n)),它们之间的欧氏距离为:
    [ d(P, Q) = \sqrt{\sum_{i=1}^{n}(p_i - q_i)^2} ]
曼哈顿距离(Manhattan Distance):
  • 曼哈顿距离是两点之间沿坐标轴的距离总和,也称为“城市街区”距离。
    [ d(P, Q) = \sum_{i=1}^{n} |p_i - q_i| ]
切比雪夫距离(Chebyshev Distance):
  • 切比雪夫距离是两点在所有坐标轴上的最大差值。对于两个点 (P) 和 (Q),切比雪夫距离为:
    [ d(P, Q) = \max_i |p_i - q_i| ]
闵可夫斯基距离(Minkowski Distance):
  • 闵可夫斯基距离是欧氏距离和曼哈顿距离的一般化形式,它包含一个参数 (p),当 (p=2) 时为欧氏距离,当 (p=1) 时为曼哈顿距离。
    [ d(P, Q) = \left(\sum_{i=1}^{n} |p_i - q_i|p\right){\frac{1}{p}} ]
余弦相似度(Cosine Similarity):
  • 余弦相似度衡量了两个向量方向的相似程度,而不考虑它们的大小。在KNN中,可以通过计算向量之间的夹角余弦来表示它们的相似度。

这些距离度量方式可以根据数据的性质和问题的要求进行选择。在实际应用中,根据特定问题和数据的分布情况,选择合适的距离度量方式对KNN算法的性能影响较大。

降维模型

降维模型是一种用于无监督学习的算法,它通过将高维数据集映射到低维空间,来减少数据集的维度并保留数据集的重要信息。降维模型的核心是选择合适的降维方法和特征选择方法。

降维模型的优点是能够降低计算复杂度和存储空间,提高模型的准确性和可解释性。但是,它的缺点是可能会损失数据集的重要信息,对异常值和噪声敏感。

主成分分析(Principal Component Analysis,PCA):

PCA通过找到数据中的主成分(方差最大的方向)来进行降维。主成分是原始特征的线性组合。通过保留最重要的主成分,可以实现数据的降维。

t-分布邻域嵌入(t-Distributed Stochastic Neighbor Embedding,t-SNE):

t-SNE通过在高维空间中保持样本之间的相似性关系,将高维数据映射到低维空间。它在可视化高维数据上效果很好。

线性判别分析(Linear Discriminant Analysis,LDA):

LDA是一种有监督降维方法,它尽可能地保留类别之间的差异,同时减少类别内部的差异。

聚类模型

聚类模型是一种用于无监督学习的算法,它通过将数据集分成多个组别,使得组内的数据点相似度最高,组间的数据点相似度最低。聚类模型的核心是选择合适的距离度量和聚类算法。
可以介绍几种常用的聚类算法:

K均值聚类(K-Means):

基本思想是将数据集划分为K个簇,每个簇对应一个中心点,样本被分配到距离最近的中心点所对应的簇。通过迭代优化中心点的位置,最终实现簇的划分。

层次聚类(Hierarchical Clustering):

层次聚类分为凝聚式(自底向上)和分裂式(自顶向下)两种方法。凝聚式方法将每个样本作为一个簇,然后合并相邻的簇,直到形成一个包含所有样本的簇。分裂式方法从包含所有样本的簇开始,然后逐渐分裂成更小的簇,直到每个簇只包含一个样本。

DBSCAN(Density-Based Spatial Clustering of Applications with Noise):

DBSCAN基于样本的密度来进行聚类。它将密度相邻的样本划分为一个簇,同时可以识别噪声点。DBSCAN不需要事先指定簇的数量,对于不规则形状的簇和噪声点的处理较为有效。

神经网络模型

神经网络模型是一种用于预测离散或连续变量的监督学习算法。它通过模拟生物神经元之间的相互作用,来构建多层神经网络,并使用反向传播算法来训练模型。

神经网络模型的优点是能够处理非线性关系和高维数据,具有较高的准确性和鲁棒性。但是,它的缺点是模型复杂度较高,需要较长的训练时间和较大的存储空间。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/81414
推荐阅读
相关标签
  

闽ICP备14008679号