小结在大三的结尾
May 17, 2019
这一个多月在风风火火地考试和赶项目中度过了。终于,大三也画上了句号,离毕业还有一年之遥了。这学期两门核心课程,一门专业课程都不容易。比起全读生有六种专业方向可选,兼读生只能从数据科学和计算机安全两个方向里选专业课程。而因为我的毕业设计是关于机器学习的,我也自然而然地选择了 CZ4042 Machine Learning 机器学习。今天就来回顾一下这三门课吧。
CZ3005 Artificial Intelligent 人工智能
这是一门几乎算是纯理论的课,介绍了关于人工智能的定义,以及关于这个课题的大纲。
作为入门课程,它主要包括了两个部分,搜索算法(Search Algorithm)以及逻辑(Logics)。搜索算法都不算太难,无非就是 BFS,DFS 和加上了 Heuristic 的 A*算法而已。另外,还包括了 alpha-beta prunning 以及 constraint satisfaction problem。而逻辑这一块则介绍了 first-order logic 以及 fuzzy rules。如果在算法方面的基础良好的话,理解这些部分都是不难的。
这门课最难的部分,我认为是下半学期关于 prolog 的两个 lab exercise。Prolog 作为一种声明式语言(declarative programming language),本身就不容易理解。没有了熟悉而直观的 if-else 条件判断和 loop 循环,反而通过声明的方式去实现 first-order logic 逻辑判断,这让我感到有些吃力。虽然最终我还是能够理解基本的概念和写法,但如果遇到递归逻辑判断,我就彻底歇菜了。比如如下代码:
append([], Y, Y).
append([H|X], Y, [H|Z]) :- append(X, Y, Z).
这段 prolog 代码的意思便是把第一个和第二个参数合并起来组成的合集放入第三个参数里面,不过它使用了递归的方法一层一层地去判断,这是在让人难以理解。最终艰难地完成了 lab,但也只是在对 prolog 一知半解的情况下才做到的。虽然困难,但体验了一次声明式语言独特的魅力,也挺有收获。
CZ3006 Net Centric Computing 网络计算
首先我得承认我非常地小看了这一门课。我以为我作为一个搞网页的,学这门课应该无比轻松。而事实证明,我实在是图样图森破。
这门课也是分为两个部分,上部分主要学习 OSI 模型,下班部分主要学习网页开发的基础,比如 HTML, CSS, JavaScript 和 PHP。作为一个搞网页的,后半部分确实不用怎么读,毕竟每天都在写。但前半部分,着实让我阴沟里翻了条大船。OSI 模型里不只是有生涩的 network 理论只是需要去死磕,甚至还有抽象复杂的算法要学习,比如网络层的路由算法,链路层的滑动窗口算法。受限于教授的解释能力,我在正常上课期间,完全无法消化这些理论,只能留到考试之前,边刷题边补上这些理论知识的理解,总算还是顺利过关了。
这一门课有两个 lab exercise,第一个是使用 Java 实现滑动窗口算法。算法的大致框架都已经提供了,并且教材上也有 C 语言版本的滑动窗口算法,加以理解之后将 C 转换为 Java 即可。第二个是使用 HTML, JavaScript 和 PHP 实现一个简单的购物车功能。如果已经有一些网页开发的经验的话,这个 mini project 简直就是一块小蛋糕。如果之前并没有接触过网页开发,那么则会有一些难度,主要体现在对代码的理解上面,很容易出现写了,跑了,结果出来了但不知道为什么的问题。
CZ4041 Machine Learning 机器学习
这是我认为这学期最有意思的一门课,听课体验非常不错,授课教授的解释也清晰无比。这门课主要围绕着机器学习最基础的入门算法来展开,比如贝叶斯定理(Bayer’s Theorem),决策树(Decision Tree),神经网络(Neural Network),支持向量机(SVM)等,K 平均值分类(K-Mean Clustering),然后再引入了一些机器学习的概念,比如模型评估(Model Evaluation),集成学习(Ensemble Learning),密度估计(Density Estimation)和维数缩减(Dimension Reduction)。
这门课需要良好的高数功底,才能理解这些模型在做什么。并且,我认为这门课的难点在于,理解这些数学模型是如何达到“智能”的。
这门课最有意思的地方在于它的 assignment。与其他科目不同,这门课的 assignment 是存在于真实世界上的数据科学比赛平台——Kaggle 上的。你需要选择一个 kaggle 项目,然后应用某些你在课堂中学到的机器学习模型去解决问题。而 assignment 的评判标准则是看你的解决方案能在 leader board 上能排到前百分之几,当真是有挑战性。
小结
这学期我其实逃课也不少,总有种快毕业了就开始懈怠懒散的感觉,LOL。不过总的来说,这学期我还是收获不少的,尤其是关于人工智能这一块,总算是入了个门,算得上白丁了。同时,我也决定毕业之后,研究生会选择人工智能的方向继续深耕。关于未来职业和学业的规划,相信不久之后我会专门写一篇文章来记录我的心路历程吧。最后一年本科生涯即将到来,毕业设计也快进入尾声,加油吧!