12 2019 档案
摘要:1. 摘要 作者提出了一个前所未有高效的新奇网络结构,称之为 CondenseNet,该结构结合了密集连接性和可学习的分组卷积模块。 密集连接性有利于网络中的特征复用,而可学习的分组卷积模块则可以移除多余的特征复用之间的连接。在测试的时候,训练好的模型可以使用标准的分组卷积来实现,在实际中计算非常高
阅读全文
摘要:1. 摘要 最近,神经网络的架构设计都是基于计算复杂度的间接度量,比如 FLOPs。然而,直接的度量比如运行速度,其实也会依赖于内存访问和平台特性等其它因素。 因此本文建议直接在目标平台上用直接度量进行测试。基于一系列控制条件实验,作者提出了设计高效网络结构的一些实用指导思想,并据此提出了一个称之为
阅读全文
摘要:1. 摘要 作者介绍了一种计算非常高效的 CNN 结构称之为 ShuffleNet,它是专门为计算资源非常有限的移动设备设计的。 这种新的结构主要用到了两种操作:分组点卷积(pointwise group convolution )和通道打乱(channel shuffle),这可以极大降低计算代价
阅读全文
摘要:1. 摘要 基于网络架构搜索和 NetAdapt 算法,作者提出了新一代的 MobileNets,并通过一些先进的结构对其进行了改进。 作者发布了两个模型 MobileNetV3 Large 和 MobileNetV3 Small 分别应用于资源较多和较少的场景,这些模型也可以被调整并应用到目标检测
阅读全文
摘要:1. 摘要 作者提出了一个新的网络架构 MobileNetV2,该架构基于反转残差结构,其中的跳跃连接位于较瘦的瓶颈层之间。中间的扩展层则利用轻量级的深度卷积来提取特征引入非线性,而且,为了维持网络的表示能力作者去除了较窄层的非线性激活函数。 2. 讨论和直觉 2.1. 深度可分离卷积 Mobile
阅读全文
摘要:1. 摘要 作者提出了一系列应用于移动和嵌入式视觉的称之为 MobileNets 的高效模型,这些模型采用深度可分离卷积来构建轻量级网络。 作者还引入了两个简单的全局超参数来有效地权衡时延和准确率,以便于网络设计者针对自己任务的限制来选择大小合适的模型。 2. 相关工作 设计轻量级的高效模型大致可以
阅读全文
摘要:1. 摘要 最近关于深度卷积神经网络的研究都集中在提高准确率上,对于准确率在同一个水平的网络,更小的网络结构至少有三个优点:1. 在分布式训练的时候需要更少的跨服务器通信;2. 从云端导出新模型到自动驾驶汽车上需要更小的带宽;3. 在 FPGA 等其它硬件内存有限的情况下更容易部署。 作者提出了一个
阅读全文
摘要:1. 题目 2. 解答 我们先来看一看回文子串的规律,如果回文子串的长度为偶数,那么其中所有的每个元素都出现了偶数次;如果回文子串的长度为奇数,那么有一个元素出现了奇数次而其余每个元素都出现了偶数次。 所以我们需要做的就是遍历一遍字符串,统计每个元素出现的次数。这里只有大写字母和小写字母,我们用一个
阅读全文
摘要:1. 题目 2. 解答 与最长回文子串类似,我们可以用动态规划来求解这个问题,只不过这里的子序列可以不连续。我们定义状态 state[i][j] 表示子串 s[i, j] 的最长回文子序列长度,那么状态转移方程为:
阅读全文
摘要:1. 题目 2. 解答 我们定义状态 state[i][j] 表示子串 s[i, j] 是否为回文子串,如果 s[i, j] 为回文子串,并且有 s[i 1] == s[j+1],那么 s[i 1, j+1] 也为回文子串。状态转移方程为: $$state[i][j] = 1 \space 如果 \
阅读全文
摘要:1. 题目 2. 解答 2.1. 动态规划 我们定义状态 state[i] 表示以 nums[i] 为结尾元素的最长上升子序列的长度,那么状态转移方程为: $$state[i] = max(state[j] + 1) \space 如果 \space nums[i] nums[j], 0 \leqs
阅读全文
摘要:1. 最长公共子串 最长公共子串与最长公共子序列有一些类似,只不过这里子串要求是连续的。 这里我们定义 lcs[i][j] 表示 以 s[i] 与 t[j] 为末尾元素 的最长公共子串长度,那么我们有: $$lcs[i][j] = \begin{cases} lcs[i 1][j 1]+1 &\te
阅读全文
摘要:1. 如何衡量字符串的相似性 如何量化两个字符串之间的相似性呢?我们可以用 编辑距离 ,也就是将一个字符串通过增、删、替换字符转化成另一个字符串需要的最少编辑次数。编辑距离越小,说明两个字符串越相似。 其中,莱文斯坦距离允许增、删和替换操作,表示两个字符串差异的大小;最长公共子序列只允许增删操作,表
阅读全文
摘要:1. 什么是动态规划 动态规划一般用来求解最优问题,这些问题一般都可以分为若干个决策阶段,每次决策对应着一组状态。我们要做的就是寻找出一组决策序列,这组决策序列能产生我们期望的最优解。 能用动态规划求解的问题有以下三个特征: 最优子结构 ,当一个问题的优化解包含了子问题的优化解时,我们说这个问题具有
阅读全文
摘要:1. 分治算法 分治算法的核心就是 分而治之 ,也就是将原问题划分为若干个规模更小但结构与原问题相似的子问题,递归地解决这些子问题然后进行合并,就可以得到原问题的解。比如归并排序就是将原数据划分为左右两个部分,然后分别递归对左右两部分排序,排完序后再合并两个有序区间数据即可得到最终整体有序的数据。
阅读全文
摘要:1. 什么是回溯算法 回溯可以看作是一个搜索问题解的过程,这个过程分为很多个阶段,每一个阶段我们都有很多个选择,但我们不知道选择哪一个,所以就随机选择一个继续进行下一个阶段,如果发现找不到解,就回退到上一个阶段采取另外的选择再继续搜索。 比如之前图的深度搜索问题,我们就是沿着起始顶点一直向下搜索,发
阅读全文
摘要:求 Top K 的算法主要有基于快速排序的和基于堆的这两种,它们的时间复杂度都为 。借助于分治思想,以及快速排序的区间划分,我们可以做到 时间复杂度。具体算法思路如下: 第 1 步,我们将原数据 5 个一组划分为若干个组,最后余下的不足 5 个的额外作为一组,总组数
阅读全文
摘要:在社交网络中,有一个 "六度分割理论" ,具体是说,世界上任何互不相识的两人,平均只需要六步就能够建立起联系。一个用户的一度连接用户就是他的好友,二度连接用户就是他好友的好友,三度连接用户就是他好友好友的好友。 给定一个用户,如何找出这个用户的所有三度(包括一度、二度和三度)好友关系呢? 1. 什么
阅读全文
摘要:几乎所有的编程语言都会提供排序函数,比如 C 语言的 qsort(), C++ STL 中的 sort(),这些排序函数是如何实现的呢? 1. 如何选择合适的排序算法? 如果要实现一个通用的高效率的排序函数,我们应该选择那种排序算法呢? 各种排序算法的特点如下所示。 线性排序算法的时间复杂度比较低,
阅读全文
摘要:冒泡排序、插入排序、选择排序这三种算法的时间复杂度都为 ,只适合小规模的数据。今天,我们来认识两种时间复杂度为 的排序算法——归并排序(Merge Sort)和快速排序(Quick Sort),他们都用到了 分治思想 ,非常巧妙。 1. 归并排序(Merge S
阅读全文
摘要:1. 何为数据结构?何为算法? 简单来说,数据结构就是数据的存储方式,比如数组就是把数据存在一段连续的内存上,而链表则是通过指针的关联将数据存在任意可用的内存上;栈是先进后出,队列是先进先出。 而算法则是对这些数据的操作方法,比如数据的插入、查找、删除、排序等。 二者相辅相成,互为一体,数据结构为算
阅读全文
摘要:1. 题目 2. 解答 在 "回溯算法" 中我们介绍了一种递归的思路来求解这个问题。 此外,这个问题也可以用动态规划的思路来解决。我们定义状态 为子串 和 是否匹配,能匹配为真,反之为假,然后状态转移方程则可以分为以下三种情况: 1. 如果
阅读全文