计算机专业读研时想主攻计算机视觉,本科期间可以学习哪些内容?
当前很多计算机专业的研究生同学会主攻计算机视觉、自然语言处理等人工智能方向,由于当前人工智能是一个热门的创新领域,所以主攻相关方向也可以认为是顺应技术发展趋势的选择。
对于计算机专业的本科生来说,如果已经明确了读研期间的主攻方向,那么在本科期间应该围绕这个主攻方向来奠定一些科研基础,这会明显提升读研期间的学习和科研体验,也会促使自己能够尽快完成创新成果输出。
在学习内容上,可以从机器学习开始了解,一方面原因是机器学习被认为是打开人工智能技术大门的钥匙,另一方面机器学习的相关学习资料和案例比较多,学习门槛也并不算高,本科生也能够获得一定的学习成就感。
在有了一定的机器学习和深度学习基础之后,可以进一步学习一下计算机视觉相关的内容,作为目前人工智能领域落地应用相对比较好的方向之一,计算机视觉未来的产业创新空间还是比较大的。
学习机器学习通常需要经过两个阶段,其一是理论知识积累阶段,其二是实践阶段。
机器学习的理论知识积累阶段可以从学习经典的机器学习算法开始,要了解机器学习的步骤,包括数据收集、算法设计、实现、训练、验证和应用等,要想完成这个过程还需要具有一定的程序设计基础和数学基础。
当然了,机器学习的门槛并不高,对于程序设计能力的要求和数学基础的要求也都不算太高,很多本科生同学也都是在学习机器学习的过程中,同步学习编程和数学知识。
实践阶段是学习机器学习过程的一个重要环节,同时很多同学也在这个阶段遇到了障碍,一方面很多课题组并不会招募本科生,另一方面机器学习的实践对于场景的要求相对比较高,如果没有专人指导,很难完成实践的过程,所以一定要重视给自己开辟出更多的实践渠道。
考虑到很多同学没有参加实践的渠道,我联合多名985大学的导师和互联网大厂的企业导师,共同打造了一个线上实践平台,在陆续开展大数据、人工智能、前后端开发等方向的实践活动,其中机器学习、深度学习、强化学习就是重点的实践内容,感兴趣的同学可以联系我申请参与,相信一定会有所收获。
最后,如果有人工智能相关的问题,欢迎与我交流。
有关机器学习的线性代数基础学习资料都有哪些?
数学是机器学习的基础。斯坦福大学教授 Stephen Boyd 联合加州大学洛杉矶分校的 Lieven Vandenberghe 教授出版了一本基础数学书籍,从向量到最小二乘法,分三部分进行讲解并配以辅助资料。此外,这本书也是斯坦福 EE103 课程、UCLA EE133A 课程的教材,由剑桥大学出版社出版(允许网络公开)。
项目地址:~boyd/vmls/
这一本书的资料还是比较齐全的,除了本身 473 页的教材,还有另一本 178 页的对应代码讲解。当然如果读者只需要了解数学部分的话,代码部分是不需要了解的。但是如果比较关注线性代数的应用,可能就需要阅读这些基础代码,并顺便学一学 Julia 语言了。最后,这一本书还提供了对应的课程 PPT,读者也可以把它们作为辅助资料。
书籍简介
这本书旨在介绍向量、矩阵和最小二乘方法等应用线性代数的基础内容,它的目标是为只有很少或根本没有线性代数基础的初学者提供入门方法,包括线性代数的基本思想以及在数据科学和机器学习等领域的应用方法。
不过读者还是需要熟悉一般的数学符号,并且在一些地方也会用到微积分,但它们并不起关键作用,因此基本上以前学过高数就差不多了。这本书包含了很多传统概率论与统计学所讨论的话题,例如使用数学模型拟合数据等,但读者不一定需要这一方面的背景知识。
这本书比一般的应用线性代数课本要有更少的数学成分,只会详细介绍基本线性代数、线性独立性等理论概念,以及 QR 因式分解这一计算工具。而这本书讨论的大多数机器学习等方面的应用只会使用一种方法,即最小二乘法及其扩展。在某种意义下,该书更强调的是应用,即依赖于少量基本数学概念和方法,而覆盖大多数应用。但是这本书所呈现的数学是完整的,因为它会仔细证明每一个数学声明。然而,与大多数介绍性的线性代数课本相比,这本书描述了许多实际应用。包括一些通常被认为是高级主题的应用,如文档分类、状态估计和投资组合优化等。
这本书并不需要任何计算机编程的知识,因此可以作为传统的教学课程,我们只需要阅读对应章节并完成一些不涉及数值计算的练习题就行了。然而,这种方法会并不能使我们完全理解这本书,同时也得不到实际锻炼,例如我们可以使用这本书的观点与方法构建一个基于数据的预测模型、增强图像数据或优化投资组合等。随着计算力的不断增长,以及 NumPy 等高效矩阵运算库的发展,这本书中的描述的方法可以轻松地应用到实践中。因此读者还可以使用 Python 等编程语言练习不同的项目而补充学习资源,只有使用真实数据搭建应用才能真切地理解理论思想。本书提供了一些需要数值计算的练习题,且数据文件与编程语言的资源都可在线获得。
这本书主要分为三部分。第一部分介绍了向量及各种向量运算和函数,例如加法、向量内积、距离和角度等。本书还展示了如何使用向量表示文档中的词数、时间序列、目标属性、产品规格、音频数据和图像等。第二部分如同前一部分重点关注矩阵的概念与应用,包括矩阵的求逆和解线性方程等。第三部分介绍了最小二乘法,它不仅展示了如何简单而自然地近似求解一个超定方程组,同时还有一些可应用到很多方法的最小二乘扩展知识。
该书还可用于自学,并辅以在线提供的资料,例如下面这份 470 页的 PPT。
地址:~boyd/vmls/vmls-slides.pdf
按照设计,本书的进度会逐渐加快,也就是说第一部分和第二部分有许多细节和简单的例子,第三部分有更多高级的例子和应用。对于只有很少线性代数基础或根本没有的读者而言,课程可以侧重于第一部分和第二部分,并且仅简单了解一些更高级的应用。而熟悉背景知识的读者可以快速过一遍前面两部分,并将重点放在最后的应用部分上。
除了线性代数等数学基础,这本书还介绍了很多机器学习应用,包括比较流行的 K 均值聚类等。而这些机器学习算法主要都介绍了数学表现形式和伪算法,并不涉及具体的代码,读者可另外查看这本书的配套代码实现。这本书提供的了基于 Julia 语言的配套代码!
下面我们将简要介绍聚类这一方面课本内容与对应的 Julia 代码。聚类也就是说将同类的无监督数据聚在一起,它的目标函数可以简单地定义为各样本到对应聚类中心的距离和。如果这个距离和非常大,那么聚类的效果就不好,我们会希望通过最优化算法最小化这个距离。在这本书中,距离可以定义为:
而 K 均值聚类会更形象地利用图像展示聚类效果,下图展示了 K 均值聚类迭代一次的更新过程:
而这一更新过程会有对应的为代码:
除了这些基础内容外,这本书还会展示很多可视化内容以帮助理解理论知识,例如展示了最终聚类结果的图 4.4 和展示了损失函数下降趋势的图 4.5:
当然,K 均值聚类还提供了对应 Julia 实现,如下展示了实现该算法的代码,读者在学习这本书的同时还能顺便学学 Julia 语言。
function kmeans(X, k; maxiters = 100, tol = 1e-5)
if ndims(X) == 2
X = [X[:,i] for i in 1:size(X,2)]
end;
N = length(X)
n = length(X[1])
distances = zeros(N)
reps = [zeros(n) for j=1:k]
assignment = [ rand(1:k) for i in 1:N ]
Jprevious = Inf
for iter = 1:maxiters
for j = 1:k
group = [i for i=1:N if assignment[i] == j]
reps[j] = sum(X[group]) / length(group);
end;
for i = 1:N
(distances[i], assignment[i]) =
findmin([norm(X[i] - reps[j]) for j = 1:k])
end;
J = norm(distances)^2 / N
println(Iteration , iter, : Jclust = , J, .)
if iter > 1 && abs(J - Jprevious)
return assignment, reps
end
Jprevious = J
end
end最后,这本书的对应代码和数据都可以在 GitHub 中找到:。
强烈推荐:
3blue1brown《线性代数的本质》系列
B站上就有
这个系列用几何直观帮助我们理解线性代数的几何本质,用于入门是最好的