毕设实录

关于选题

事实上在做毕设之前我从来没有接触过机器学习相关的科研或者项目,实习做的也不是这个方向。是在和导师沟通的过程中,觉得这个题目有点意思,加上之前没怎么做过研究,于是脑子一热答应选了这个如导师所言”有挑战性”的选题。

虽然做的过程中经常要死要活,也一度非常迷茫自己到底能不能做完,但是因为最开始的确是对选题感兴趣,所以倒也有不少苦中作乐或者惊觉“Eureka”的时刻。毕竟本科生比较少会在毕设上被为难,所以抱着“只要认真做了一定能过”的心态,去做些自己感兴趣的尝试,也不枉费投入的时间与精力。

从零开始快速恶补机器学习——面向毕设学习机器学习

  • 系统性的阅读:找一本教材。能动手跟着做练习最好,如果时间有限,其实重点熟悉与自己的毕设有关的方面就够了,其他的反正一时半会用不上,用到了再说。

  • 论坛:(eg:Reddit,Stackoverflow)找更亲民、短平快、面向具体毕设主题的材料。

  • Chatgpt:学习一些基本的概念,或者是复习。注意:GPT只能说人话,不能保证正确,留个心眼,在实践中验证。对于基础知识,大概率材料已经在它的训练数据里,所以拿不准的时候还是会问它。

因为我的毕设本质做的是优化问题,所以针对毕设问题来学习对我来说就是:关注性能优化,可以少看公式,多关注性能衡量指标的原理,具体方法的原理先放一放。

阅读文献

  • Zetero:读文献的时候划重点,做批注,对文献类型分类,导出引用都很方便。
  • ChatPDF - Chat with any PDF!:在读文献初期,对所做领域所知甚少的时候,通过交互式的提问可以更快了解一篇论文是否对自己的毕设有帮助。
  • 学会读摘要:
    • 背景是什么:与你的毕设题目是否相关
    • 过去的研究局限是什么:补充关于现有研究的知识,可能会启发思路
    • 该论文提出的解决方案是什么:对你的主题是否有启发

对我来说:因为我的毕设本质是一个已有方案的优化问题,所以读文献花了很长时间。原因是需要了解:我的问题场景下已经有什么优化方法、是否有效、是否适用于已有方案。

做实验

从配环境开始到复现代码再到改自己的方案,可以说每一步都是血汗泪,比如我就是一个配环境赔了一个星期的冤种。因为旧方案当中的很多依赖包已经被更新了,导致安装的环境兼容问题很多。算是写代码过程中的必经之路吧。记录了一些心路历程和经验教训如下:

  • 配环境的时候发现问题越来越复杂,遂重开,仔细想想很多事情都符合这样的道路
  • 脚本跑不动——先检查单行命令
  • 等实验完成的时候可以整理下笔记思路。如果是在debug的过程中,可以搜索问题其他可能解法,假如当前措施失败了还有得替换。
  • 心流是好事。但是面对问题需要经常跳出思路,偶尔起来走一走,吃吃水果泡泡茶,有助于打开思路
  • 面对新领域出现的报错 建议是先用chatgpt等解读报错信息 大概了解问题的上下文 当chatgpt提供的信息越来越模糊的时候 可以及时切换到搜索引擎去看更具体的个人经验 有了前面的铺垫不至于看不懂 又能得到更有针对性的信息
  • 看到报错不要慌 先认真看上层调用 看上下文 推断可能出现的问题 再打断点或者是加输出来显示程序的状态 在运行程序是需要一定代价(例如时间)的情况下,审慎的推断比无头苍蝇式的重启更有效 磨刀不误砍柴工
  • 改动框架的时候会出现一些意料之外的错误,这个时候需要找到报错点和上下文,打出想要的信息。如果有可以参照的调用,把参照的调用信息也打印出来,对比着看程序状态是哪里不一致导致了问题
  • 实验需要时间 在这个过程中可以头脑风暴 切换思路 或者记录当前的进度 切换线程比切换进程容易 最好还是做相关的事情
  • 梳理好框架 调用模块之间的关系 再写代码事半功倍
  • 没有报错的bug,可以通过是否有输出来判断是否有问题——被迫使用了二分法debug,最后发现是运行时间过长的问题。

做实验是一个不断失败、调整、再试验的循环,尤其是对于一个优化问题来说,光做出一个方案是不够的,目标是做出一个“更好”的方案。在这个过程中,不断碰壁也是值得记录的,因为排除了种种不可行不够好的方案,才能得到最后的方案,而这些都可以作为论文的写作素材。

写论文

我,是一个五月初还在改代码但是在最终方案确定后在两天写了近一万字的苦命毕设人。能在短时间内爆肝一万字,靠的是过去几个月时间里的积累,一个迫在眉睫的ddl(因为我要在去看演唱会之前写完初稿),和一丢丢写作小技巧。

写论文时不同的任务优先级:

  • 决定好要写什么:列要点,整合材料
  • 根据要点组织内容与遣词造句,画图
  • 审阅修改,美化图像
  • 调公式版型,加引用

人不可能一直都精力旺盛,所以在精力水平高的情况,我会优先做比较费脑子的任务;在感到疲惫的时候就调一调格式,画一画图,放松的同时梳理了思路。

如果觉得下笔很难,不需要强求自己写一个完整的、通顺的句子,可以先列大纲,列出你想要写的关键词、关键句,甚至只是把你脑海中的想法、你做实验过程中遇到的问题写下来,都是一个很好的开始。和创作差不多,在有东西可写(例如你已经阅读了大量论文,做了笔记,或者在做实验的时候吃了很多苦头,积累了很多失败经验)的情况下,不要因为觉得自己脑海里的东西很模糊很混乱就拖延:重点是先把脑子里的想法写出来。有了初步的素材,再进行整理与优化会方便很多。

如何很高明地水字数:

  • 最后没用上的前人工作也可以利用起来:
    • 和背景有什么关系,
    • 为什么没用上,
    • 如何启发了你寻找现在的新思路
  • 用上的前人工作:
    • 做了什么,
    • 有什么不足,
    • 和你的工作有什么关系,前人工作提出了什么问题
  • a → c 可以扩写成a到b,b到c:
    • 梳理思路的同时,确认逻辑链
    • 向阅读者解释前因后果,在自己的领域做多了会忘记一些结论对于初次看论文的人来说并不显然
  • 逻辑连词的使用:
    • ‘即’字的使用:换一种说法,比如把一个抽象的概念转换为具体的、可观测的指标

答辩

我是如何在看演唱会期间做的答辩准备,使得我在6min内讲完ppt并且流畅地回答了答辩组老师提出的问题?

其实大头功夫在平时付出的时间精力,以及对所作内容的记录与梳理。只要是自己认真做的毕设,对自己毕设的来龙去脉足够了解是不成问题的。我在网上大概搜索了一些答辩经验,花了20min根据自己的论文结构列了大纲。做ppt的时候从论文里搬运了一部分代码架构示意图充实内容。

如果答辩有时间限制,初步做好ppt以后掐表试讲再修改,心里会更有底。

最后,毕设完结撒花!谨以此文做一个小小的总结回顾。