在之前4月的时候,一天看到了清华深圳研究生院夏树涛老师的招生通告,于是就向其发了封简历,结果到了4.30号的时候,我惊讶的发现竟然收到了回复。老师给了一个project,要先做完project然后再进一步面试,project要求一个月做完,之后再安排复试。

之后这个5月其实主要精力就放在了做这个project上,结果就是直到今天31号,离完成差了十万八千里,刚刚发邮件过去承认了自己的失败。具体的时间分布和原因分析我放到了结尾。

夏老师的研究方向还是比较广,project上有10个课题可以选,分别是自拟、深度学习数据增广,深度学习模型轻量化,对抗样本,图像超分辨,机器学习中的安全和隐私保护,乘积量化哈希与图像检索,深度压缩感知,计算机网络智能拥塞控制和计算机网络智能视频传输。

我选的是计算机网络智能拥塞控制,具体要求如下:

可以一眼看出来的不是很好做hhh,各个课题的任务量是差不多的。

TCP拥塞控制

计算机网络的十大核心课题之一,如果解决TCP拥塞。
这里首先理一下关系。

  1. TCP是可靠传输,假设主机A向主机B发包,那么B接受到A的包后,需要向A发送一个ACK,A接受到ACK才会认为B已经收到之前发送的包了。
  2. 假如A在某一个固定的时间间隔内没有收到B的ACK,A就会认为自己发送的包产生了丢失,就会执行重传以及相应的拥塞控制策略。
  3. 试想对于上面那副图中所示的网络系统,假如说中间两个核心路由器之间的Bottleneck Link的带宽只有20Mbps,而每个Server都以100Mbps的速率发送包,那太容易在左侧路由器处各个包形成拥堵了。
  4. 拥堵意味着每一个包需要等待一定时间才能从中间的Bottleneck Link上通过,由于发送速率大于瓶颈链路速率,包的堆积会越来越多,每个包的等待时间也会越来越长。同时,由于等待时间不久后就会超过Server端的等待ACK时间,Server端就会认为包已丢失进行重发,重发的包又继续堆积到中间的路由器上,形成恶性循环。
  5. 所以怎么让Server端的主机可以根据丢包情况(没有收到预期ACK的情况)调控自己的发送速率从而使整个网络达到最优化呢?这就是拥塞控制问题。
  6. 拥塞控制的主要难点在于,Server端的主机对于整个网络的情况是未知的!假如Server端可以知道整个网络的情况,拥塞控制问题就不是问题了(比如上面的例子就可以让每个Server以20Mbps减去瓶颈链路已使用带宽的速率发送包)。实际网络中,除了少部分内部网络可以提供网络环境情况外(in-net support),几乎所有的网络都只能在端对端(end-to-end)的情况下实现拥塞控制,即只能根据自身发送包的速率,收到ACK的速率或比例,各个包的rtt这些可以在端获取到的信息来对网络情况进行猜测并在端这里采取相应的行动。

一般教科书上会介绍经典拥塞控制方法是Reno算法,由慢启动、拥塞避免、快速恢复三个阶段组成。

让我们离开教科书之外。在Reno之后,基于Reno改进的NewReno算法逐渐占据了主导地位。再之后新的算法层出不穷,直到cubic算法的优秀性能逐渐得到了公认。

然后,Google在2016年提出了BBR算法,对整个拥塞控制算法领域进行了一轮革新。该算法强大到直接让youtube的日吞吐量整体上升了4%并让rtt下降了33%。不得不说Google真的是推动计算机行业进步的公司,VR眼镜、Bert模型、浏览器插件商店,就连拥塞控制这种感觉脱离应用的领域都能直接带来领域爆炸。。相比之下国内的互联网巨头还一直关注于商业和应用倒是有点显得器小了。。

TCP拥塞控制甚至整个网络领域都是相对不那么容易落地的研究方向,读论文就会发现一大堆一大堆算法的提出,好像大家都是在为了发paper而发paper,真正实际的应用场景也许就只能看看Linux的新版本又选用了什么算法之类的,这个方向变现能力极其缺乏是真的。

关于拥塞控制算法的一些资料我也放在了文末,有兴趣的读者看一下。

回到正题,上面提到的都是经典的拥塞控制算法。现阶段,鉴于人工智能是时代主旋律和技术发展方向,科学家们开始考虑着将机器学习应用到传统的拥塞控制上。

增强学习

先解释一下机器学习、深度学习和增强学习。
这部分主要参考了一下知乎的一个问题,链接我也放在了最后。大致可以总结为以下几点:

  1. 机器学习指一切通过优化方法挖掘数据中规律的学科。传统的机器学习包括线性回归、逻辑回归、决策树、支持向量机等等。机器学习包括深度学习和增强学习。
  2. 深度学习大致指运用了神经网络作为参数结构进行优化的机器学习算法。深度学习的训练样本是有标签的而且学习过程是静态的。经典的深度学习领域像cv,nlp。都是通过训练集标注训练、测试集检验的方法进行。
  3. 增强学习不仅能利用现有数据,还可以通过对环境的探索获得新数据,并利用新数据循环往复地更新迭代现有模型的机器学习算法。强化学习的训练是没有标签的,它是通过环境给出的奖惩来学习。强化学习实际应用目前还较窄,主要包括AI游戏(如Atari),推荐系统(如阿里家的),机器人控制相关(如Ng的无人机飞行)。

关于增强学习,这里推荐一个入门tutorial。A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)。这是一个可以在20分钟内实现的例子,可以最快最直观的感受到增强学习最经典的Q-Learing算法。

关于增强学习怎么在拥塞控制中应用呢?其实想一想会觉得还是挺合适的。增强学习相对于深度学习的优势是在于对不断变化的环境进行适应,通过更加个性化达到更好的性能(没错核心还是性能)。而网络一个很大的特征就是网络环境会不停变化。比如上面提过的哑铃型网络,瓶颈带宽在实际情况中是不一定会一直保持不变的,可能隔壁的server在这个小时对带宽消耗很大,下一个小时又不消耗带宽了。因此能够适应变化的情况的学习方案按理来说会有更好的性能表现。再加上用上机器学习这种万能黑盒方法,表现应该是不会太差的。

在这里引用那几篇论文中的随便一篇的摘要吧

下一代网络访问技术和Internet应用程序增加了为使用传统拥塞控制协议的用户提供满意的体验质量的挑战。根据特定的网络体系结构或应用程序,通过修改核心拥塞控制方法来优化TCP性能的努力,在广泛的网络场景下并不能很好地推广。这种限制源于基于规则的设计原则,其中性能与预先确定的网络观察状态到相应操作之间的映射相关联。因此,这些协议无法适应新环境中的行为,也无法从经验中学习以获得更好的性能。我们通过将基于强化的Q-learning框架与TCP设计集成在我们称为QTCP的方法中来解决这个问题。QTCP使发送方能够以在线方式逐步学习最优拥塞控制策略。QTCP不需要硬编码规则,因此可以推广到各种不同的网络场景。此外,我们开发了一种广义的Kanerva编码函数近似算法,减少了值函数的计算复杂度和状态空间的可搜索大小。我们展示了QTCP优于传统的基于规则的TCP,它提供了59.5%的高吞吐量,同时保持了较低的传输延迟。

Next generation network access technologies and Internet applications have increased the challenge of providing satisfactory quality of experience for users with traditional congestion control protocols. Efforts on optimizing the performance of TCP by modifying the core congestion control method depending on specific network architectures or apps do not generalize well under a wide range of network scenarios. This limitation arises from the rule-based design principle, where the performance is linked to a pre-decided mapping between the observed state of the network to the corresponding actions. Therefore, these protocols are unable to adapt their behavior in new environments or learn from experience for better performance. We address this problem by integrating a reinforcement-based Q-learning framework with TCP design in our approach called QTCP. QTCP enables senders to gradually learn the optimal congestion control policy in an on-line manner. QTCP does not need hard-coded rules, and can therefore generalize to a variety of different networking scenarios. Moreover, we develop a generalized Kanerva coding function approximation algorithm, which reduces the computation complexity of value functions and the searchable size of the state space.We show that QTCP outperforms the traditional rule-based TCP by providing 59.5 percent higher throughput while maintaining low transmission latency.

总之8篇论文的核心思想都是,在某种场景下,我们把增强学习应用在了拥塞控制中,效率得到了很大的提升。当然,具体的应用场景还是比较有趣的,有一篇是将其应用在了命名数据网络上,还有一篇是根据拥塞控制算法选择13个经典控制算法中的一种应用(选择算法的算法),都非常有意思。

下面再介绍一下我在这个月的学习过程中遇到的一些其他的有意思的话题。

ns3网络模拟

要想进网络这个领域,一定是要熟悉模拟工具的。比较常见的模拟工具有ns2,ns3,omnet,opnet这些,因为那几篇论文大多用的ns2和ns3所以我选择了ns3。

相比于人工智能那边的框架,这些网络模拟框架的完善程度和学习资料真的是有点寒酸。。其实ns3相对来说也算是完整易用了,但是和其他框架比起来不支持windows,没有主流IDE扩展支持,没有自动配置,种种都让它显得让人有那么点想吐槽。。

另外ns3-tutroial真的是事无巨细的讲解呀。。200页的英文入门门档,虽然看懂确实没啥问题但是真的费时间呀,另外对于复现论文来说tutroial完全不够,manual又是几百页,再看看需要的model-library。。。而且B站上都没有几个好点的ns3教程。

总之我觉得ns3的入门还有很多事情可以做,要是我之后真的走了网络方向我就去自己做视频吧,也欢迎大家为ns3的普及出力。

如果想要对网络模拟有所了解的话,我也把ns3的官网网址放在了文末。

新一代网络

新一代网络是个很有意思的话题。2010年由UCLA牵头的基于CCN概念的NDN项目NSF资助,使得长期以来不温不火的ICN网络又一次受到了重视。

核心思想在于传统的网络以IP为中心,不是很好,新一代应该以内容为中心。

这意味着我们写网络程序会有很大的改变哈,拿那8篇论文中的一篇中举得例子来说:

  • 当我们要请求网络资源时,我们不再需要在客户端程序中写目标地址!
  • 在网络包在网络中转发时,中间节点可以缓存网络包,这样可以让客户端在下一次的请求直接从中间节点获得所需内容。
  • 对于任一节点,每个网络包的信息是可见的!因为基于内容,所以节点会知道这个包是网页、视频流、音频流或者其他什么,根据不同的内容类型可以采取不同的拥塞控制策略(这是非常美好的构想,因为不同内容对于带宽的要求会有明显差异,而这在IP中心网络中是不可得的)。
  • 用官方的话来说,网络从推模式(由server推给client)变为了拉模式(client向网络拉取自己需要的内容)

从某种角度上来说,对于客户端程序,网络变得向一个黑盒,对于网络本身,则有了多得多的可利用信息。

实际上ICN是一种构想,负责具体实现的架构除了NDN(命名数据网络)、还有XIA,还有很多其他的。北大深研院的李挥教授的工作MIN网络,就类似于一个整合了新一代各种场景的网络混合架构方案。

不过新一代网络这个方向一听就是不好落地hh,几乎所有互联网开发者都能意识到,现在对整个网络的筋骨下手是十分困难的,几十年来无数宣称能重构网络的网络层、运输层协议大多都没有掀起什么浪花。现在新一代网络的研究已经进行了十年,虽然在很多方面都有了一些方案出来,但至少直到现在还没有商用落地案例。选这个方向还是要好好考虑一下,不过好在这个topic目前有一定的政策支持和热度,也不好说是不是一定实现不了。

关于新一代网络的一些其他资料,我也放在了文末。

关于领域初瞰的部分到此就结束了。后面是我的个人失败原因分析。。

失败原因分析

核心来说就是两点:确实难,不上心。

我的时间线大致是,读6篇半论文总共用了差不多2周的时间(后面两篇并没有读完),最开始的几篇是一边翻译一边记笔记整理思路,平均每篇十几页的论文要花3-4天,后面几篇就因为也有点急了,就直接读英文加上在pdf里加批注,同时实验部分统统跳过,这样的方式就大概1-2天一篇,但是对论文的熟悉程度就和前一种方式差的远了。除此之外,读ns3-tutorial和配置环境花了一个多星期。其实这样下来就只剩了大概一个多星期的时间来复现论文。但是复现论文时发现复现对ns3的要求要大大超过tutorial,增强学习没有基础的情况下很多公式看着容易实际上自己写不成代码,以及自己的C++编程能力确实差劲。1个多星期没有完成复现。

上面说的是确实难这个原因,但不上心体现在哪里呢?其实理论上说复现论文给10天时间应该是足够的了,即使对于我这样之前没有复现过的人来说也不是一定完不成的任务。但是如果遇到问题全无思路却也不愿意去找相关的group问而是自己一边磨时间一边慢慢浏览文档和google的话,如果每天还是只付出六七个小时在复现上面而每天娱乐时间也有四五个小时的话,如果由于虚拟机卡严重影响效率却不想着去解决而是由着性子干脆慢慢搞的话,那必然会失败的。可怕的是我恰恰全部犯了上面这些错误。

除此之外,还有自身编码能力的严重不足。举个非常简单的例子。在Q-Learning中,我们需要维护一个QTable表。具体为由一个state和一个action可以得到一个Q-value值。在论文的具体场景中,state由三个字段构成:avg_send(平均发送速率),avg_ack(平均收到ack速率)和avg_rtt(平均rtt)。action有三种情况,分别是cwnd = cwnd +10, -1, +0. 整个运行过程中大概会出现2000个state,每个state和action对应的Q-value可以用double表示。那么应该如何实现呢?

这其实是个很小,很简单(相比于核心算法来说)的问题。但是却卡了我一两个小时。很容易想到应该实现成根据state和action获得Q-value的数据结构,但是具体怎么做呢?用stl库,一开始想用unordered_map,但是是不是map更合适呢?map内部用的是红黑树,需要键实现能比较大小的重载,根据大小比较查找元素。unordered_map使用的是hash,需要键实现hash函数的重载。在这个场景中应该是用map更适合,因为state的三个成员全是数值,比较大小会很方便而且分布会比较好。但是这里有state和action两个对象要作为键,怎么办呢?要使用stl的pair类吗?使用的话不仅要嵌套中多次实现重载,查询、添加都要有很多逻辑处理(如果之前采用unordered_map方案,hash重载更麻烦的要死),不如直接使用state重载“<”作为键,每个值是一个长度为3的一维数组,对应着每个action的具体Q-value值,这样在设计上和实现上都会方便些。但是对于我来说,想到unordered_map,查相关用法用了十几分钟,想到map,查相关用法用了十几分钟,发现需要重载运算符或者哈希,查相关重载方法用了十几分钟,想到pair,查相关用法用了十几分钟。时间就这么过去了,完全不行。。这次也算是用事实打破了我之前一直自认为编码能力良好的认知吧。

最后还有一点是怀疑,虽然不能说是我没做完的主要原因,但也确实是对我的效率产生了一定影响。我在五月的大多数时间,内心是认为自己不会成功进到夏老师课题组的,因为我的水平是留本校而不是进清华的水平。这就有一个很诡异的逻辑链。我有考核资格->我的实力和对方的层次本身就不匹配->我不会通过->我没有必要努力。我现在觉得,真的应该找准自己的目标,要根据自己的实力水平确定要跳到哪里,这样才会避免上面的逻辑链的出现。之前和一位同学聊,他问我是不是总是告诉自己失败是正常的好让自己觉得失败了也不丢人,当时我未明白其意,现在才认识到这种思维的害处如此之大。除此之外,之前和另一位同学关于方向和现实的讨论也让我沉沦了两三天并一度想要放弃这个项目,但是那个关于方向选择的问题这里就不想再展开了。

最后插一句。我个人的情况是樱花大学软件工程专业,排名31/258(12%)。科研经历有一段这学期划水的科研经历,但是是非常冷门的RFID协议方向,而且没有产出。项目经历有一个校级大创和一个没有得奖的花旗杯比赛项目。其他方面能说的就是软考过了,六级518。保研的同学应该都能看出来,我能拿出手的东西其实相当少,但这样的简历还是通过了简历关,可见夏老师确实是更注重动手能力而不在简历上卡人。所以来年如果还是这样的形势的话大家大可以不必拿着比我好的多的成绩而自卑,大胆投一投简历,夏老师的口碑确实还是挺好的,学术能力也很强。

资料

网络拥塞控制:
ns3中关于各个拥塞控制算法的一个简要介绍
面试头条你需要懂的 TCP 拥塞控制原理
TCP BBR算法与Reno/CUBIC的对比
一文解释清楚Google BBR拥塞控制算法原理
Google BBR拥塞控制算法背后的数学解释

增强学习:
机器学习、深度学习和强化学习的关系和区别是什么?
A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
关于使用了增强学习的拥塞控制算法,可以查阅前面放上的project里面的论文。

ns3模拟:
ns3官网
ns3-users的google-group

新一代网络:
互联网网络架构发展白皮书发布
什么是命名数据网络NDN?
以NDN和IPFS为代表的ICN架构能为互联网带来什么
信息中心网络的前世今生
其实关于新一代网络,还是推荐大家直接去看相关的论文。会科学性强一些。不过说回来这个新一代网络。。现在好像连个成体系的书籍都没有。。

一些其他有趣的知识
如何看待 HTTP/3 ?

2020年5月总结(网络拥塞控制和增强学习初瞰)相关推荐

  1. 商汤科技(上海)自动驾驶计算机视觉算法实习生面经-2020年10月

    商汤科技(上海)自动驾驶计算机视觉算法实习生面经-2020年10月 今天参加了商汤的初面,商汤是我最想去的一个公司了,技术很强,paper也多(mmdetection作者),记录一下本次面试. 本次面 ...

  2. 计算机网络与多媒体试卷,2020年9月网络教育统考《计算机应用基础》多媒体技术模拟题试卷2...

    2020年9月网络教育统考<计算机应用基础>多媒体技术模拟题试卷2 11.下列不属于多媒体范畴的是______. A.交互式视频游戏 B.交互式多媒体教学 C.有声图书 D.普通电视 答案 ...

  3. 不属于计算机完成科学特点的是,2020年9月网络教育统考计算机应用基础模拟题试卷4...

    2020年9月网络教育统考计算机应用基础模拟题试卷4 一.单选题 1.______是第四代计算机的典型代表. A.微型机 B.超小型机 C.巨型机 D.大中型机 答案:A 2.个人计算机又称PC机,这 ...

  4. 2020年9月25日-01-项目启动(团队分工)+带宽,网络速度的计算

    此博客用于记录2020年9月25日每日分享, 大概讲讲团队里的分工合作那些事儿. 关于带宽啊,网速啊之类的一些事儿 日期:2020年9月25日 主题: 团队合作怎么合作?有什么人?一般用什么工具?诸如 ...

  5. 中医大2020年7月网考计算机应用基础,2020年7月网络教育统考计算机应用基础模拟题试卷9...

    2020年7月网络教育统考计算机应用基础模拟题试卷9 一.单选题 1.第四代电子数字计算机采用______作为逻辑元件. A.大规模集成电路 B.集成电路 C.晶体管 D.电子管 答案:A 2.个人电 ...

  6. 中医大2020年7月网考计算机应用基础,2020年7月网络教育统考《计算机应用基础》Internet应用模拟题试卷2...

    2020年7月网络教育统考<计算机应用基础>Internet应用模拟题试卷2 11.下列说法错误的是____. A.电子邮件是Internet提供的一项最基本的服务 B.电子邮件具有快速﹑ ...

  7. 2020英语计算机统考成绩多久出来,网络教育2020年12月统考成绩查询时间已经公布:1月24日...

    原标题:网络教育2020年12月统考成绩查询时间已经公布:1月24日 网络教育统考是很多人都需要参加的考试,从2020年10月31日9:00开始至11月7日17:00,本次统考全国可报考总名额为65. ...

  8. 网络教育统考计算机和英语作文,2020年9月网络教育统考大学英语B模拟冲刺题试卷5...

    网络教育统考一般都需要考计算机应用基础. 大学英语等科目,其中大学英语考试分很多题型,比如交际英语.阅读理解.词汇与语法.完型填空等等,现在我们提供大学英语B的冲刺试卷,英语算是统考中比较难的科目了, ...

  9. 计算机统考多媒体技术操作题,2020年9月网络教育统考《计算机应用基础》多媒体技术模拟题试卷操作题...

    2020年9月网络教育统考<计算机应用基础>多媒体技术模拟题试卷操作题 操作题: 1.在考生文件夹中,有一个"Test.rar"压缩文件,其中包括"Test1 ...

最新文章

  1. 混合现实未来的八大应用场景
  2. java sftp nologin_SFTP连接通过Java询问奇怪的身份验证
  3. linux——DHCP的配置问题
  4. JQUERY的size()与length
  5. JAVA语言异常,Java语言中的异常
  6. 95-50-060-java.nio.channels-NIO-NIO之Selector(选择器)
  7. 去中心化交易协议 Bancor 新增支持限价订单
  8. linux lite 3.6 64bit,Linux Lite 3.6 正式发布:基于 Ubuntu 16.04.3 LTS 打造
  9. 6.字符串截取数据求平均分
  10. python语法使用方法_Python语法基础
  11. 上海招聘 | 上海人工智能实验室:自动驾驶感知算法研究员、实习生等
  12. 推理的2种方式:演绎和归纳
  13. 全网目前最全python例子
  14. 生日祝福电子贺卡html5,电子生日祝福卡
  15. 猴王问题(项目分析以及项目实现)
  16. A or B Equals C Gym - 101028C
  17. 杭州电子科技大学2020计算机研究生考研经验贴
  18. CodeForces - 1324D Pair of Topics(二分或双指针)
  19. office2016安装部分组件教程
  20. 这样软件开发人才级别的划分你同意吗

热门文章

  1. Java项目:访客管理系统(java+SpringBoot+layUi+JSP+Maven+mysql)
  2. 设计模式——简单工厂设计模式
  3. css2d炫酷效果,利用CSS3实现炫酷的飞机起飞动画
  4. 音频应用(如sip与Voip),编解码API(Ringtone,SoundPool,MediaPlayer),回声消除等(Lame Speex等),OpenSL ES
  5. QN8027关键寄存器速查
  6. AliOS Things+阿里云 10分钟搭建智慧农业解决方案
  7. UEFI的一点点概识
  8. 常见大数据面试题汇总带答案
  9. 浏览器自动填充数据,Cookie清除不了?,这是因为某些浏览器设置了,自动填充账户名密码,造成cookie没有删除的假像。
  10. [POJ1601]青蛙的约会(exgcd)