0%

本回答写于完全阅读大问题之前。

没有任何哲学素养的我只能大概按照第一章学到的内容,用逻辑、推论去解释我的思想。、

1.有没有某种你愿意为之付出生命的东西?如果有,它是什么?

有。人的生命是有限可穷的,不愿结束生命的原因是生命还有继续发光延续人生价值的意义。但若付出生命可以实现自己最大的人生价值,那么便死而无憾。(人生价值因人而异,于我,仔细想想,似乎还没有?因此答案也可以称为暂时没有?)

2.如果你只有几分钟可以活了,那么你将怎样利用这段时间?如果还能活几天呢?二十年呢?

答:
几分:把自己的爱意、感激告诉对方。
几天:已经没有机会学习哲学,科学,因此除了第一点,可能就是记录一些人生中的片段和粗浅的感想,然后去一个特别想去的地方。
二十年:找到自己的兴趣爱好,并且彻底钻研进去,为人类文明做出成就,留下属于自己的灿烂。

3.有一位著名的哲学家曾经说过,人的生命就像牛或者昆虫的生命一样没有什么意义。我们吃饭、睡觉、活过一段时间、生殖,别的动物也是如此,生命没有任何最终的目的。你会怎样来回答他?人的生活拥有哪些在牛或者昆虫那里无法找到的目的?你生活的目标是什么?

答:
人类拥有由书本等载体记录在案的光辉的思想,既前人之志而为后人铺路,这是人类文明灿烂的原因,也是我们生活所能达到的最终目的。

4.你信仰上帝吗?为什么?上帝是怎样的(也就是说,你所信仰的是什么)?你怎样向一个不信上帝的人证明你所相信的是真的(或者说是值得信仰的),即上帝的确是存在的(什么会使你改变想法)?

若称上帝为自己信仰之神,我没有。我是个唯物主义者,我相信科学,相信万物皆由物理定律和化学定律限制组成。

5.下面哪种东西最“真实”——是你所坐的椅子,构成这张椅子的分子,还是当你坐在上面时的感觉印象?

Interesting, 何谓真实?在我现在的定义为自己感官所能感受到的,因此印象=椅子>分子。

6.假定你是心理学家实验室里的一只动物,但你拥有思想和感觉的所有能力,也就是说有一个与现在完全相同的“心灵“。你无意中听到科学家跟一位助手说:”别担心,它只是一头不会说话的动物,既没有思想,也没有感觉,只是在按照它的本能活动罢了。“你怎样证明你的确具有思想和感觉,有一个”心灵“?现在假定有一位心理学理论家(比如哈佛大学的B.F.斯金纳)这样说,一般说来,没有所谓”心灵“这种东西,人只是”行动“罢了(也就是,根据从环境中接受到刺激去移动身体和发出声音)。你将怎样证明你的确有一个心灵,你不仅仅是一个自动机或者机器人,而是一个有思想、有感觉的存在?

自动机、机器人接受外界的刺激移动身体和发出声音是有逻辑控制的,但是我的思想可以有无穷尽的可能性。

7.假如你生活在这样一个社会,每一个都相信地球是静止不动的,而太阳、月亮和群星则围绕地球,沿着可以预测的轨道作着也许比较复杂的运动。你反驳说:”你们都错了,地球是围绕太阳转的。“但是没有人同意你的说法。他们都认为你疯了,因为人人都感到地球并没有运动,人人都看到太阳、月亮和群星在运动。到底谁是正确的?难道真的可能只有你懂得真理,而其他人都是错误的?

我看来的地心说太阳说谁正确 取决于事实如何,而不是人的思想何如。

8.”生活不过是一场梦”,一首老歌这样唱道。假如你觉得有这样一种想法是可能的或者至少是可以设想的(比如在一堂哲学课上):你此刻仍然还在床上睡着觉,只不过梦见自己在读一本哲学书。你该怎样向你证明这不是真的,你其实正醒着(捏自己并不管用,为什么)?

梦境中的我们也不会觉得是梦。不过依据我的经验,梦境中的世界不是由严格物理定律组成的世界。

9.把你当成小说中的人描述一下自己。谈谈你的举止、习惯、个性以及特征用语。你最终成了一个什么样的人?你喜欢这个人吗?喜欢(或不喜欢)ta的哪些方面?

这是一个待人友善、有着似乎是天生的与陌生人便能聊天的力量的人。他有着互联网世界中特有的互联网文化的年轻人的放荡不羁、口无遮拦、大大咧咧的德行,由于小时候的经历,他是个在乎他人看法但不会表现出来而是 经常反思自己的人。喜欢这种人的善良,不能评价归结于己是否就可取,但我喜欢这样的人。

10.你怎样向一位外星来客解释你是谁(什么)?

。。。手势?舞蹈?音乐?

11.我们发明了一台机器,它是一个有着若干电极和一个生命维持系统的箱子,名叫”快乐箱“。只要你进入这个箱子,就会体验到一种特别快乐的感觉,而且这种感觉将一直持续下去,因为它可以产生足够多的变化使你不会失去新鲜感。现在我们想邀请你去试试。只要你愿意这么做,你可以随时决定出不出来;但我们可能会对你说,人一旦进到箱中,还没有谁愿意出来过。过了十个小时左右,我们接通了生命维持系统,人们就在那里耗完他们的一生。当然,他们其他什么事都没做,所以过了若干年后,由于缺乏锻炼,他们的身体开始变得肥硕臃肿,摇摇晃晃,但他似乎从未为此烦心过。现在轮到你做决定了:你愿意跨进快乐箱吗?为什么?

不愿意,快乐不是我的人生目的。

12.一个好人(一个不去做恶,只做”分内之事”的人)必定会快乐吗?换句话说,你相信生活最终是公平的吗?一个恶人——至少是最后——必定会受惩罚吗?(如果不会,为什么每个人还要力图做一个好人?)

快乐很大程度取决于自己。能够在困境中也能找到快乐的人可以称为一个明智的人,但好人与明智的人往往不是等于号。我不相信生活是公平,恶人最后也可能不受惩罚:事实上无数例子已经证明了。

做一个好人不是为了自己不会受惩罚,而是内心的善意驱动着自己做自己愿意成为的人。

13.你相信杀生在任何情况下都是错误的吗?

错误即为不可取?但若如此理解,我认为杀生并不错误,因为有时候是可取的。

14.你是否曾经做过一个不牵扯别的任何人而完全只属于你自己的决定(也就是说,不是因为你的父母向你提出,不是因为你的朋友或者电视、书籍、电影的影响,也不是因为迫不得已或过分受到某个人或某种情况的影响)?

人根据自己的思想做决定,而人的思想本就是在周围的人、经历过的事、看过的书等方方面面的影响下形成的,所以答:“在不受任何影响的情况下做出只属于自己的决定”这种说法本身就是有问题的。

15.自由总是一件好事吗?

如果按照思想自由的定义来看。思想的自由是毫无疑问的好事。可取的事。

16.你想要孩子吗?为什么?

答:想。喜欢心里有一个牵挂、把他培养成人的感觉。

我的大学

记于即将入学Mphi。愁绪万千,难以言语。

相比我的高中,我的大学似乎没有那么多需要记录的事物,外面的朋友、同学、发生的事物都少多了,就像一个在北上广深过着灯红酒绿生活的人一下子去了克利夫兰?但是我的内在,或者说我的三观真的是有了翻天覆地的变化。因此我还是需要记录一下的,我大学大概的模样,从生活到学习,从学习到内心。

就像回忆NBA或是LOL中的经典场景一样,当我想起大学那些有代表性的片段时,往事也如电影一般清晰的刻画在我的心里。

入学

如果对刚入学的我做一个定义的话,应该是有以下元素的。

  • 也许是错误读取了高中入学的参数,copy了高中的光头造型。

  • 饱读诗书和明朝那些事儿后带来的器宇轩昂buff还没退散,还是一个自傲的自命清高的理想主义者。

  • 朝气蓬勃,亦如当年的香港般。

  • programming skill = 0

  • mathematical ability = 80

  • english skill = 50

平凡

人成长的过程,就是认清自己也只是一个普通人的过程。说来惭愧,或者说是残酷,大学最大的收获,也许是认清了自己不是什么天才,也只是一个普通人,需要努力才能有所进步,就算努力也可能毫无收获。

应该是大二到大三那段时间吧,吃完了高中奥赛的红利后,尤其是CS专业课的加入,继续大一吊儿郎当的我开始力不从心,再加上一些Interview的糟糕表现:我一直是对自己interview,presentation特别自信的人,我从不怯场并且喜欢这种感觉。我真切的认识到,就算世上真有那种无需准备便口若悬河的天才,我也不是其中一份子。我也是一个需要时间精力去学习才能进步的人,也是一个需要准备面试问题才能从容应对的人,在我的世上,哪有什么容易。

认清自己后,随之而来的便是长久的挫败感。便如书到用时方恨少一般,面对复杂数学公式时,感慨自己数学一团糟,要求解一个超大矩阵的逆矩阵时,心里叹息着怎么这些矩阵定义都忘了,或者想表示自己的思想时,就好比巧妇难为无米之炊一样,肚子里没墨水没知识体系,只能一直“我觉得”“我觉着”。

朋友

同学有,朋友有,那种玩得很来的死党也有。只是可能大学确实更加接近社会一点,大家不会聊理想梦想之类的话,都是现实的计划。大学四年在香港也没有太多的娱乐休闲,除了大一大二在社团里会一起出去郊游玩耍之外,跟同系的朋友们似乎都只有出去吃饭勉强算作一个娱乐。

不过很幸运的是还是结交到许多一起proj、一起游戏的好友,比如凯灿、博一。

  • 越发越觉得自己的无知,因此不对他人、他物的三观做任何的评断。但是这堪比小时代的剧情,我只能吐槽一句:霍导,真有你的。
  • 七八十年代作品中的爱情很模块化,它们的形成是浪漫的,原因是美好的,两个人的内心也是纯洁而高尚的,对于爱情的描写侧重于所求的“真爱”,就像两片纯洁荷花的结合。同时,爱情的阻碍不是金钱、物质,往往是阶级、职业、思想。时过境迁,如今作品中的爱情再也见不到那时候的模样,也可以说是七八十年代特有的风景。于我而言,两者的爱情标准我都不喜欢,但真要说的话,回到民国、回到封建社会,我也是不喜欢的,我理想中的自由无须有除两人外的限制,只要两人真心相爱并且心灵相通,这便足够了不是么?当代的社会会有人说我何不食肉糜,不懂贫穷的困难。但这就像穆斯林的葬礼里面 韩太太训斥我不是穆斯林不能结婚,不懂穆斯林的信仰一般。没有什么是不能克服的,如果你觉得有,也只是你觉得罢了。
  • 那个年代对成功的定义是个人价值的实现,而现在社会的主流价值观恐怕在当时是避之不及的资本主义倾向吧。成功如何,在时代变迁中居然出现巨大甚至完全相反的变化。
  • 完全理解不了冰玉的所作所为。打着爱情、自由的幌子侵犯他人的权力、过后除了一句“你打吧”便全是埋怨不懂自己,这种行为在我看来和现在许多白莲花政客大同小异。在我看来,你有自己的三观你认为正确可以 ,但是你不能跟着自己的三观做出侵犯他人的行为,这不是成熟,反而是任性。
  • 宏大的宗教背景下许多故事线、人物描写太过唐突,先不说剧情是否狗血,从韩子奇赴英开始完全失控,这本书在我看来真的盛名难负。

隐形守护者

聊聊游戏之外的事

第一次听说这个游戏就特别想玩,不是别的,只是纯粹觉得这个游戏模式很有趣,主题也不是仅限于有点厌俗的儿女情长。

但当一步步玩下去的时候,不仅为了游戏剧情而感动,也为制作组的用心而敬礼。忘了是哪位先生说的话,中国自古不缺少XXX,而缺少XXX。是的呀,呜呼我中华延绵至今,不缺乏投机取巧的人,不缺乏多情自古空余恨的人,不缺乏才华横溢超逸绝伦的人,但真的,太缺少为信仰为理想而奋斗,而生活的人了。

回头政治性的想想,只有这样的作品,才是真正可以做到文化输出的作品,才是可以提现文化自信的作品。虽然有点“狗仗人势”的意味,但我真的很自豪的,因为这样的作品肯定也有程序员的贡献,这也是我当初不假思索选择计算机的原因之一:稍微读了一点经济学的书之后,我也大概明白经济学确实能提高资源的利用效率,自由市场可以双方受益。但我始终还是有着一点来自理工男的偏见和傲慢,我们在做的是技术层面上指数型的做大这块蛋糕。

似乎有点说远了,我想,这是这部作品给我最大的震撼。抛开游戏剧情不说,制作组在如此恶劣环境下顶着压力做出了一个广受好评的游戏,这就是一件可敬之事。再想想自己,惭愧。

关于游戏本身

不太想多记录游戏背后本身的“政治正确”,譬如原作中的银狐其实是共产党内部的矛盾,而非国民党的特务。对我来说,这部作品给我最大的感慨便是,人生不过短短百年,我们真的得摇醒自己互联网时代自我沉浸的思想,花点时间好好想想,何为过好自己的人生。

小顾面对的是职业选择和家国抉择。她很迷茫,她不知道自己的道路。其实我们又何尝不是如此,随波逐流,或是随利逐流。游戏有很多路线,大家可能都喜欢那个圆满的大结局,80年洗白自己身份。但是真的设身处地想想,或是忽然告诉你三个身份,国民党的年轻高层,日本的归国英雄,还是共产党的汉奸农民?其实答案是显而易见的吧,但为什么我们会向往最后一个呢?因为我们在用上帝视角玩一个游戏,我们知道国民党最后会倒台,我有多憋屈,我们知道日本英雄会被人揭穿,最后死在原子弹下,我们知道我们正在80年总会洗白。但可惜的是人生没有上帝视角,我们永远不知道下一块巧克力是什么味道。我们就像温水里的青蛙,慢慢的慢慢的从心中所想的勇士变成了不认识的恶龙。

我真的好担心自己进了国民党线,变成一个油腻的中年人,闭嘴张嘴就是钱女人房子车子孩子。我不想成为一个温水的青蛙,因此我想时刻提醒自己,不要把自己的人生陷在无休止的物欲、竞争中。我们敬佩武藤志雄,因为他不是陷在权位利益中捞油水的人,他是真的有自己的理想并为之奋斗。我们敬佩第二号、敬佩方汉洲,也是为他们这顽固而迷人的儒夫思想。

接触的越多,越明白自己的渺小,无知。因此,我不敢对于这部作品的哲学意义、中心思想做个什么系统总结,我只希望我自己不要为了物欲去行事,而如果是真的内心想做、喜欢做,一定要用心做,努力做,这样才能不负此生。

DNN加速,目前的几个热门方向有:

  • tensor decomposition。将卷积运算中的tensor利用PCA等数学技术 降解成 低维、低rank、稀疏的tensor,从而直接提高计算速度
  • Quantization and Pruning. 将tensor中每个weight,或feature map里所有数值,利用quantization/pruning 提高计算速度。
  • Network structure。$5\times 5 = 3 \times 3 + 3\times 3, 3\times 3 = 3\times 1 + 1\times 1 + 1\times 3$

本篇文章另辟蹊径,直接从input入手,通过在减小input size的基础上 最大化input信息,从而directly的加速运算(对input(图像)的研究是CV方向了,需要对CV研究的比较透彻,也难怪是sensetime参与的)

与其他方法比起来最明显的优势就是可以直接应用到不同的model structure(比如ResNet 到ResNext),而不需要对内部结构有修改。

Introduction

problem

difficult to simultaneously buffer the input feature maps, the output feature maps, and the filter weights in limited internal accelerator memory.

Previous method

use large SRAM buffers (up to a few MBytes may be used). drawback: large amounts of memory are not affordable.

Another point/direction:

  • data reuse , is determined by the dataflow schedule of computatio

    • Previous work: the working set of these innermost loops fits the available internal storage

      drawback: existing models have not been adapted to explicitly application managed buffers, which constitute by far the most common memory architecture template for CNN accelerators, therefore, overestimate internal storage requirements

Contribution of this work:

  • new analytical memory performance model to evaluate dataflow schedules
  • best dataflow schedules
  • applied it on the case study of the design of a flexible CNN accelerator for deeply embedded Systems-on-Chip.

Background

Convolution loop-nest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// M output fmaps loop
LOF: for (m = 0; m < M; m++)
// C input fmaps loop
LIF: for (c = 0; c < C; c++)
// spatial loops (ExE)
LSY: for (y = 0; y < E; y++)
LSX: for (x = 0; x < E; x++)
// filter loops (RxR, stride S)
LFY: for (k = 0; k < R; k++)
LFX: for (l = 0; l < R; l++)
{
p = I[c][y*S+k][x*S+l];
w = W[m][c][k][l];
O[m][y][x] += p*w;
}

Goal

The problem consists in minimizing the number of memory accesses to the off-accelerator memory given a limited local buffer capacity.

Reuse in convolution

  • Input feature maps
  • Output feature maps
  • Weight

the reuse of a reference is carried by a loop if the same memory location is used by different iterations of that loop

However, unless the entire working set fits the local buffer, this reuse cannot be taken full advantage of.

Reuse buffer

  • Data cache

  • Application-managed scratchpad memories

    partitioning the local reuse buffer in a set of application-managed buffers,

Data Locality Optimization

  • reordring

  • titling

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // output fmaps -- loop on tiles
    LTOF: for (mm = 0; mm < M; mm += mss)
    // input fmaps -- loop on tiles
    LTIF: for (cc = 0; cc < C; cc += css)
    // spatial -- loops on tiles
    LTSY: for (yy = 0; yy < E; yy += iss)
    LTSX: for (xx = 0; xx < E; xx += jss)
    // output fmaps -- tile loop
    LOF: for (m=mm; m<min(mm+mss,M); m++)
    // input fmaps -- tile loop
    LIF: for (c=cc; c<min(cc+css,C); c++)
    // spatial -- tile loops
    LSY: for (y=yy; y<min(yy+iss,E); y++)
    LSX: for (x=xx; x<min(xx+jss,E); x++)
    // kernel -- tile loops
    LFY: for (k=0; k<R; k++)
    LFX: for (l=0; l<R; l++)
    {
    p = I[c][y*S+k][x*S+l];
    w = W[m][c][k][l];
    O[m][y][x] += p*w;
    }

Method

Analytical model for evaluating the dataflow schedules

Distance $d_X(L)$

The number of loop iterations in the loop L , that separates two consecutive accesses to the same data element X

(d次iteration后,再也不会access到这次access的data element)

footprint $F_X(L_i)$

the footprint of array X in loop L measures the number of distinct elements of X used inside L.

1552309141092

n(L) : loop L 的interation数目, L0 代表最里面的inner loop

the actual required size for the application-managed buffer is computed as follows:

1552309773395

memory traffic $T_X$

number of bytes accessed in off-accelerator memory for array X

1552309887178

PX the numerical precision (in bytes) used for its storage.

It should be noticed that i here is actually defined on maximal B(Li) that fits the size of buffer

个人也是初学根本就不了解谓词是什么意思,通过下面的例子大家自己体会吧。

 

下面程序演示了count_if();

该程序创建一个包含数字1-19的矢量,然后统计能够被3整除的元素个数。

为了达到这个目的,程序首先创建了一个称为dividesby3()的一元谓词,如果谓词的参数能够被3整除,该谓词返回ture

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

bool dividesby3(int i)
{
if((i%3)==0)return true;
return false;
}

int main()
{
vector<int> v;
int i;
for(i=0;i<20;i++)v.push_back(i);
cout << "Sequence:/n";
for(i=0;i<v.size();i++)cout << v[i] <<" ";
cout << endl;
i=cout_if(v.begin(),v.end(),dividesby3);//谓词就在这里被用到了
cout << i <<" numbers are divisible by 3./n";
return 0;
}