📜  深度学习和机器学习对数据结构和算法的需求

📅  最后修改于: 2021-10-19 07:56:45             🧑  作者: Mango

深度学习是一个在很大程度上基于数学的领域,您需要对数据结构和算法有很好的理解才能以最佳方式解决数学问题。数据结构和算法可用于确定问题在内部如何表示或实际存储模式如何工作以及问题背后发生了什么。

深度学习领域需要哪些数据结构和算法知识,为什么需要?

1. 算法(最重要)

1.1 动态规划算法(DP):

动态规划概念有助于探索每一种可能性,然后负责选择在计算的每个步骤中最期望的一个方面。在遗传算法中,强化学习算法使用动态规划的概念。生成模型,特别是隐马尔可夫模型,利用了同样基于动态规划的维特比算法。

1.2 随机和次线性算法:

这些算法有助于随机优化、随机低秩矩阵逼近、深度学习的 Dropout、回归的随机归约,这些是深度学习学科的关键主题,而在深度学习中出现亚线性优化问题,例如训练线性分类器并找到最小的封闭球。

1.3 更多算法:

  • 梯度/随机算法
  • 原始对偶方法

2. 数据结构(最重要)

2.1 链表:

如果节点是已知的,那么插入和删除是链表中的常量时间操作。因此,链表可用于与动态数组相同的应用程序,因为如果新元素插入在开头或中间,则数组需要移动元素,这是 O(N) 时间复杂度,成本很高,因此链表可以是被认为是一个完美的更便宜的选择,因为它也可以转换为数组。

2.2 二叉树和平衡二叉树:

由于二叉树被排序,插入和删除可以在 O(log N) 时间复杂度内完成,就像上面提到的链表概念一样——二叉树也可以转换为数组。现在最坏的情况是,当数据线性排列时,插入是 O(N) 并且需要应用各种转换技术来使树更加平衡。此外,深度学习中的 NN 算法需要使用二叉搜索树概念的 k 维树的知识。

2.3 堆数据结构:

这个数据结构在某种程度上类似于树,但它基于垂直排序,与树不同。尽管如此,同样的应用程序可以应用于堆数据结构,就像在上面的树的情况下应用的那样,但采用了不同的方法。此外,与树不同,大多数堆存储在一个数组中,元素之间的关系只是隐式的。

2.4 动态数组:

遇到线性代数的一个非常重要的话题,具体来说就是矩阵运算,遇到一维、二维,甚至三、四维数组。此外,如果使用Python作为实现深度学习算法的主要编程语言,则需要很好地掌握Python NumPy。

2.5 堆栈数据结构:

基于“后进先出”的概念,深度学习中的大多数库使用递归控制语言来泛化二元分类,可以通过堆栈来实现。此外,堆栈很容易学习,掌握好可以在许多计算机科学方面有所帮助,例如解析语法等。

2.6 队列数据结构:

它被定义为“先进先出”,其方法用于预测排队场景,其中可以从给定的数据集中绘制排队等候人数与概率密度的直方图。同样可以用于记录赛车在进入终点线时排长队的赛车的分段时间,这里可以应用排队的概念来记录每辆车经过的分段时间并绘制相应的来自给定数据集的直方图。

2.7 设置:

集合数据结构非常有用,因为与深度学习相关的数学主要基于处理数据集,因此这种数据结构对于深度学习的长期职业非常有帮助。此外, Python有一个非常有用且备受青睐的 set 方法。

2.8 哈希:

这是一种数据索引方法,可用于减少深度学习的计算开销。最佳散列函数用于将数据集转换为称为散列的可组织的小数,并且散列当然在信息存储和检索上下文中大量使用。在“大数据”成为广泛使用的术语之前,散列是处理大数据的关键方法之一,它显示了散列的能力。

2.9 图表:

这种数据结构在机器学习领域有着巨大的影响。例如在链接预测中,预测未来最有可能形成的缺失边或预测知识图中实体之间的缺失关系。因此,您需要精通深度学习或机器学习的图数据结构。

参考:

  • 了解数据结构
  • 了解与深度学习相关的各种算法