Just do it. 开始动手去做是成功的第一步,也是最关键的一步。
科研→Re-search→反复搜索→要学会自己通过搜索调研解决问题,实在解决不了的再寻求他人帮助,自主解决问题的能力是最重要的。
推荐一个最近新出的集论文下载、阅读、管理、分享,笔记等多种功能为一体的科研工具ReadPaper:https://readpaper.com/。
一个别人写的科研经验总结:https://github.com/pengsida/learning_research。
1. 基础课程:重点掌握《高等数学》《线性代数》《概率论与数理统计》《矩阵论》《凸优化》课程,这里的掌握是要理解它们的本质、作用及物理几何意义,而非应付考试。建议搜索国内外优秀书籍、公开课、视频进行学习。例如,《线性代数》推荐《线性代数的本质》系列视频https://www.bilibili.com/video/BV1ys411472E(注:3Blue1Brown这位大神不止做了线性代数本质这系列视频,还做了很多其他本质系列视频,强推),以及Gilbert Strang的麻省理工大学公开课视频https://www.bilibili.com/video/BV1zx411g7gq。
快速了解机器学习所需要的数学知识,建议学习《Mathematics for Machine Learning》一书。
2. 机器学习:推荐国立台湾大学李宏毅机器学习课程https://www.bilibili.com/video/BV1Wv411h7kN?spm_id_from=333.337.search-card.all.click,清华大学大佬白板推导系列https://www.bilibili.com/video/BV1aE411o7qd?spm_id_from=333.337.search-card.all.click。
3. 深度学习:推荐Google研究科学家Ian Goodfellow(Generative Adversarial Nets提出者)的花书《Deep Learning》(有中文译本 人民邮电出版社),斯坦福大学李飞飞(ImageNet的提出者)老师的cs231n计算机视觉课程https://www.bilibili.com/video/BV1nJ411z7fe。
4. 科研编程:操作系统Linux,主要编程语言Python,主要深度学习框架Pytorch。因此,要掌握Linux的使用方法与常用命令,熟练使用Python语言编程,熟练使用Pytorch深度学习框架搭建网络与深度学习算法。Linux学习:https://www.runoob.com/linux/linux-tutorial.html;Python学习:https://www.runoob.com/python3/python3-tutorial.html;Python第三方库Pillow(处理图像)学习:https://pillow-cn.readthedocs.io/zh_CN/latest/;Python第三方库Numpy(CPU处理多维张量)学习:https://www.runoob.com/numpy/numpy-tutorial.html;深度学习框架Pytorch(使用Python编程,GPU处理多维张量,提供深度学习API)学习:https://pytorch.org/docs/stable/index.html。
1. 科学上网: (自己找方法)
2. 检索论文:GoogleScholar:https://scholar.google.com/
3. 下载论文:IEEE:https://ieeexplore.ieee.org/Xplore/home.jsp;ScienceDirect:https://www.sciencedirect.com/;SpringerLink:https://link.springer.com/;以上三个网站均为正版版权官网,需要收费,西电均已购买,因此在学校内网可以免费下载。arXiv:https://arxiv.org/ 占坑网站,最新的文章会发表在上面占坑,但是良莠不齐,免费下载;Sci-Hub:https://www.sci-hub.ren/ 不在学校内又想下载IEEE等版权收费文章,Sci-Hub是神器,网站宣言...to remove all the barriers in the way of science,地址可能会变,因为一直被告。
4. 管理论文:Mendely:https://www.mendeley.com/;Endnotes:https://www.endnote.com/;Zotero:https://www.zotero.org/;自己选择。最新推荐:ReadPaper:https://readpaper.com/。
5. 撰写论文:LaTex环境安装:http://tug.org/texlive/;按着网站指导来。也可以使用在线的LaTex编辑工具如Overleaf:https://www.overleaf.com/login。
6. 论文作图:PPT、Visio;直接保存成PDF就是矢量图,使用Acrobat将图片多余部分裁剪。
7. 代码编辑:VSCode(Visual Studio Code):https://code.visualstudio.com/;你想要的代码编辑功能都能通过VSCode+插件实现。常用VSCode插件:LaTex Workshop(用VSCode写论文,前提得先装好LaTex环境)、Remote-SSH(用VSCode直接浏览编辑远程服务器上的代码和图片)、One Dark Pro(让VSCode更好看)、Bracket Pair Colorizer 2(让代码每一级括号带不同的颜色,括号再也不会不成对报错了)、Code Spell Checker(检查你的拼写是否有错误)、indent-rainbow(不同级的缩进带不同颜色,对Python来说很有用)、Python(可以直接在VSCode调试Python程序,前提得先装好Python环境)、Copilot(基于上下文的代码补全及生成)。
8. 远程连接工具MobaXterm:https://mobaxterm.mobatek.net/,集成了SSH和SFTP等,连接访问远程服务器时十分方便。
AIGC领域包含很多研究方向,但是不同的研究方向仅是输入输出数据以及任务形式上有所不同,他们所涉及的核心方法/算法是相同的,都要使用机器学习/深度学习技术,而且该领域的发展也是受到机器学习/深度学习技术的发展驱动的。因此,想要对各研究方向的前沿展开研究、发表论文,掌握机器学习/深度学习的前沿技术是必要条件。
根据AIGC@IIP-XDU所开展的科研工作,下面给出了需要重点掌握的机器学习/深度学习技术:
【深度生成模型】
首先要对深度生成模型有个整体视角的理解,理解什么是生成模型、什么是深度生成模型、深度生成模型能做什么、深度生成模型的分类。
Jakub Tomczak《深度生成建模》讲座报告与视频:https://www.bilibili.com/video/BV1pb4y1s7hS/?spm_id_from=333.337.search-card.all.click&vd_source=cd39e17f789bd6d503b915533f2c2237
电子书Deep Generative Modeling:https://link.springer.com/book/10.1007/978-3-030-93158-2
这些深度生成模型中,重点掌握:
GAN (Generative Adversarial Networks,生成对抗网络)
1. 学习GAN的原理,可以看CS231n、李宏毅机器学习相关视频,或者搜一些博客等。
2. 跑通DCGAN的代码,https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html
3. 读pix2pix跟CycleGAN这两篇论文,弄清楚原理
4. 跑通pix2pix跟CycleGAN代码, https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
5. 学习StyleGAN与GAN Inversion、GAN Prior技术原理
Diffusion Models (扩散模型) 【重中之重】
Diffusion Models是深度生成模型的最新技术,目前基本各个领域的最前沿方法都是基于Diffusion Models提出的。因此,必须掌握Diffusion Models。
Diffusion Models具体可参考这个文档。
【网络架构】
CNN (Convolutional Neural Networks,卷积神经网络)
1. 学习CNN的原理,包括前馈神经网络、激活函数、反向传播算法等。这些是理解CNN的基础。可以看CS231n、李宏毅机器学习相关视频,或者搜一些博客等。
2. 了解卷积层的工作原理。卷积层是CNN的核心组成部分。需要理解卷积运算、卷积核的作用、步长、填充等概念。了解池化层、归一化层的作用和常见方法。
3. 学习常见的CNN模型结构,如LeNet、AlexNet、VGGNet、GoogLeNet、ResNet等。了解它们的组成及创新点。
5. 掌握CNN的训练方法,包括数据准备、模型构建、模型训练、参数调优等流程。
5. 上手实现一个简单的CNN模型,如MNIST数字识别任务,使用Python和PyTorch等工具练习代码实现。
6. 了解CNN在计算机视觉领域的典型应用,比如图像分类、语义分割、图像生成等。
Transformer
1. 要理解Transformer的基本原理和架构。Transformer使用了self-attention机制来捕捉序列中的长程依赖关系,不依赖RNN或CNN。要理解multi-head attention,positional encoding等核心概念。可以看李宏毅机器学习相关视频,或者搜一些博客等。
2. 阅读原论文“Attention Is All You Need”,这篇论文详细地介绍了Transformer的设计思想。另外可以看看一些关于self-attention,multi-head attention的教程,辅助理解原理。
3. 学习图像方面的Transformer模型,如ViT、DeiT等。这些模型是将Transformer应用于图像处理任务的代表工作。理解它们的网络结构设计和训练策略。
4. 了解Transformer在计算机视觉任务中的最新进展,如在多模态视觉任务中的应用等。这可以了解该领域的研究前沿。
5. 使用Pytorch实现一两个经典的基于Transformer的视觉模型。
6. Transformer框架库 https://github.com/huggingface/transformers
【损失函数】
1. L1 Loss(绝对误差损失):计算预测图像和目标图像之间的平均绝对误差。数学公式为:loss = mean(|y_pred - y_target|)。其缺点是生成的图像较模糊。
2. L2 Loss(均方误差损失):计算预测图像和目标图像之间的均方误差。数学公式为:loss = mean((y_pred - y_target)^2)。其缺点也是生成的图像较模糊。
3. Perceptual Loss:基于特征提取网络(如VGG)提取两张图像的特征,然后计算特征之间的距离。能够生成较清晰的图像,但是会引入风格偏差。
4. Adversarial Loss:基于生成对抗网络(GAN)的判别器输出的对抗损失。能够生成清晰逼真的图像,但训练不稳定,容易模式崩溃。
5. Style Loss:匹配图像的风格特征,如格拉姆矩阵。常用于风格迁移任务。
6. Total Variation Loss:惩罚图像中不连续的高频分量,以平滑合成图像。
7. Cross-Entropy Loss(交叉熵损失):这是图像分类任务中最常用的损失函数。它将模型输出的类别概率与ground truth的one-hot编码作比较,度量两者的差异。其公式为:L(x,y) = -sum(y*log(x))其中x是模型的输出概率,y是ground truth的one-hot编码。优点是易于求导,计算效率高。
8. Center Loss(中心损失):中心损失通常和交叉熵损失一起使用。它通过最小化特征向量与类中心的距离来促使同一类的样本特征向量接近类中心。其公式为:L_cent = ||x - cy||^2其中x是样本的特征向量,cy是对应的类中心。优点是可以 学习更具判别性的特征。
9. Triplet Loss(三元组损失):三元组损失在度量学习中广泛使用。它通过最小化anchor样本与positive样本的距离,最大化anchor样本与negative样本的距离来学习区分不同样本的特征表示。其公式为:L = max(||xa - xp||^2 - ||xa - xn||^2 + margin, 0)其中xa,xp,xn分别是anchor,positive,negative样本。优点是可以学到区分性很强的特征。
10. Contrastive Loss(对比损失):对比损失是一种用于度量两个样本间相似性的损失函数,常用于表示学习中。其关键思想是:将正样本对(真实相似的样本对)的表示拉近,将负样本对(不相似的样本对)的表示推开,从而学习到能够区分不同样本的表示。对比损失函数的一般形式如下:L(x1,x2,y) = y * D(x1,x2) + (1-y) * max(margin - D(x1,x2), 0),其中: x1,x2 是两个输入样本;y 是标签,当x1和x2为正样本对时y=1,否则为0 ;D(x1, x2) 是x1和x2之间的距离度量;margin是设定的边际参数当样本对为正样本对时,损失函数会减小其距离;当样本对为负样本对且距离小于margin时,损失函数会增大其距离。这样通过最大化正样本对的相似性和最小化负样本对的相似性,模型可以学习到有区分性的表示。
以上是较为常见、通用的损失,其他损失可根据具体研究方向、研究任务进行了解、学习。