All posts by Jerry Zhang

About Jerry Zhang

Had been loved by the world.

《肖申克的救赎》——Never give up hope.

看了《肖申克的救赎》。从以前一直觉得,电影中过于美好或者过于悲剧的情景都无法让我感到真实感,无法将自己代入主人公的心境
但是《肖申克的救赎》不一样,这是非常简单的一部电影,简单地描述了主人公被冤枉后在监狱中的狱中生活。以及传达了一个简单的主旨: Never give up hope.

He just want to feel normal again.

Andy 在房顶冒着被抛到楼下的风险,鼓起勇气,对狱警警备队队长海利说可以帮他免税,从而为朋友们换来了每人三瓶冰镇啤酒。在朝阳下,Andy 靠着墙壁看着伙伴们开心地喝着酒,不为别的,只为了 feel normal again. 这里看到了他的洒脱,感受到了 Andy 的阳光与朝气。就很佩服 Andy,他没有选择在堕落的监狱中与其他人一同堕落,即使监狱很苦,即使还要反抗三姐妹的鸡奸,但他还是默默地坚持了下来,选择忍受。并且,Andy 可以在绝望中寻求希望,在乏味的日常中,让自己和朋友们再次感受到自由的意义,再次 feel normal again.

Hope is a dangerous thing.

Red 对 Andy 说, Hope is a dangerous thing. 因为老 Red 在监狱里经历了许多,不想再尝试了,放弃了对自由的希望,他只想在这个堕落的地方,以自己的方式,残喘地过完自己的一生,默默地接收了 to be institutionlized. 对 Red 来说,屡次尝试却屡次失败,希望有多高,与现实的落差就有多大。每每产生了新的希望,却又被重重地抛到地上,这滋味想必也不好受。他可能想的是,“人生苦短,及时行乐”,“如果没有努力,就不会失败”,经历过太多次失败的心痛,Red 感觉自己无法再次承受,所以选择了逃避,堕落,挺能理解 Red 的。

Andy 对自己的救赎

在被误判后,Andy 被关进大牢,但是他没有放弃对自由的希望,哪怕时间再久,哪怕周围的人对他说, Hope is a dangerous thing. It drives you crazy. 但 Andy 还是无法放弃。Red 说肖申克每个人都要有一点小爱好。Andy 的爱好就是每晚用小的不能再小的地质锤挖出自己通往自由的通道吧。每天往前挖一点,也应该是 Andy 每天生活的动力。怀着对自己妻子的歉意,每天在堕落的监狱中进行着对自己的救赎。最后,在越狱前一天,向 Red confess 了自己对妻子的罪行,将自己憋了二十年的话说了出来,那时应该是 Andy 在监狱中最快乐的时光。

Andy 对 Red 及监狱中的人的救赎

Andy 是一个非常阳光的人。他除了在完成自我救赎时,还在默默地救赎着堕落的肖申克。他为同伴们争取冰镇啤酒,为肖申克的犯人们建造图书馆,给他们公放音乐,都是为了让他们和 Andy 自己更再次感受到自由的味道,再次地 feel normal。但是,对于他的好朋友 Red 来说,这已经太晚了。Brooks 去世后,Red 的第一句话是: He should have died in here. Andy 听到这句话应该也会明白,虽然 Red 自己不想承认,但是他也被 institutionlized 了,如果不管 Red,他的归宿会和 Brooks 一样。所以 Andy 为他准备了前进的动力,给了这个认为 Hope is a dangerous thing 的老家伙希望。Andy 默默地救赎着整个肖申克。

Andy 对我的救赎

看这部电影时,正好受了很重的打击。感觉人生没了希望,没有了目标。活着只是为了对别人负责,不让别人难过。浑浑噩噩地过了几天日子。然后想起自己要看电影,鼓起精神,随便找了一部经典的电影,正好选到了这部《肖申克的救赎》。感受到了希望的力量。给我再去前进的动力与勇气,重拾了人生的目标。感谢 Andy。

Remember Red, hope is a good thing, maybe the best of things and no good thing ever dies.

一周见闻分享#1

0. 歌曲分享,《夜空中最亮的星》

1.多设备的 Hey Siri

发现当两台可以使用 Hey Siri 的设备登录在同一个 Apple ID 下,当它们都开着蓝牙和 WiFi ,并且相距足够近时,说 Hey Siri 只会唤醒一台设备的 Siri 功能,就经验来讲,会唤醒能更清晰地听到 “Hey Siri” 的设备。

2.《嫌疑人 X 的献身》

以下内容包含大量涉及《嫌疑人 X 的献身》的剧透

这一周读完了《嫌疑人 X 的献身》,并同时看完了日本与中国的同名改编电影。日本的电影对原著内容改动不大,对细节的还原也非常饱满,而中国的电影则大幅度改编了原著的剧情。
从原著开始说。和读东野圭吾的《白夜行》时一样,读书读到接近一半时看了眼封面,大概就能猜到后面的故事了。虽然没有想到石神改变尸体死亡时间的方法,但也是就着知道石神最后会去献身读下去的。读到汤川告诉静子石神为了保护他们而杀死了一个无辜的人时,竟哈的一下笑了出来,想,“又感受到了东野圭吾在《白夜行》中的套路:以震撼人心的恶衬托主角的的爱,最终以悲剧收场。”

石神的孤独

总感觉过于理性的人是很难再感性上有自己的见解与认知的,过于理性终究会使人生的意义单一化,当发现自己的人生的意义无法被实现时,就会失去生存的价值。读完一遍,最先感受到的是石神的孤独。数学怪才石神以偏执的性格做着数学研究,生活中的朋友也只有汤川这个近二十年没有见过的老朋友。读着石神的日常生活,每天平淡无奇,如果没有靖子出现,他每天生活的目标大概就是进行数学研究吧。在因为研究一直没有进展而失去生活的目标时,靖子出现了。靖子就是他人生的太阳呀,石神每天最大的幸福就是能在早上在弁(biàn)天亭买便当时与靖子简单地说两句话,自卑的他从没有幻想能与靖子发生更进一步的交集,如果不是靖子和美里杀死了前夫,每天像这样孤单地感受着靖子的存在,对石神来说大概也挺好。
逻辑鬼才达摩石神在心中也是孤单的。在两位警官在学校拜访石神时,石神说:“(我给学生们出的题目),看似是几何问题,实际上是函数问题。”,明明和这个案件联系那么紧密的手法,以石神的才智,应该不会想不到这样的话是不适合和警方随便说的。但是,孤独的石神长久以来无人分享心事,没有朋友能开开玩笑,探讨最近取得的成就,聊聊自己心里所想的,他以前肯定在与别人的交往中,会以这样的别人听不懂的方式,向别人炫耀自己的成绩,与别人倾诉自己的心事。警察拜访石神时,因为与案发事件有关,骄傲的石神应该也就习惯性地,以调戏警方的态度(想的应该是,“我就算这样隐晦地告诉了你们我的手法,你们也无法理解”),将自己的手法展现给了警方。

秘密的重量

这是很早就明白的道理:守护秘密是要承担秘密的重量的,有时选择不将秘密告诉别人是对别人的负责。石神半推半就地向汤川承认了自己的作案手法,算是将自己的秘密分享给了汤川。石神自首后,汤川推理出了石神的全部手法。他选择将石神的秘密告诉靖子,汤川对靖子说:“(如果不告诉你),他未免牺牲得太不值得了。这不是他的本意,但看到你这样一无所知,我实在无法忍受。”,对警官草稚说:“但我实在看不下去,我认为她(靖子)应该知道。”。 他嘴上说着是为了石神,是为石神觉得不值得。但是,事情已经发生,石神也已经自首,这时候值不值得都是石神自己的选择,再说值不值得已经没有了任何意义。汤川想必是明白这一点的。他将石神的秘密告诉靖子,不是为了石神,也不是出于正义。只是这个秘密过于沉重,他无法独自承受,所以汤川为了他自己,将这个秘密告诉了草稚和靖子。第一次读的时候觉得汤川过于自私。出于自我感动就将石神的手法告诉了靖子。但是,再仔细想想,这个秘密的确过于沉重。自己的好友为了别人做出那么大的牺牲,或者说是献身,而对方却不知情。换做谁心里也不会好受。汤川也没有理由要独自承担这样背负秘密的痛苦。

石神的爱

靖子如同太阳,住在石神的隔壁,用她辐射出的余波就能温暖着石神的生活。所以,石神对靖子的爱,是无私的,不求回报的。只是感到她在身边,就能感受到温暖,找到活着的意义。所以当石神看到靖子前夫的尸体时,已经计算好了,如果靖子被抓,那么他自己的生活也毫无意义,所以他选择了如同飞蛾扑火一般,为自己的太阳献身。在旁人和石神看来,这样的爱是无私的,是伟大的,是非常令人感动的。但是,石神在应当感性时中过多地使用了理性,他通过他理性的计算,认为自己可以帮靖子脱罪,通过他理性的分析,认为靖子和工藤先生一起生活可以获得幸福。但是,他却忽略了感性的人心。他毫无所求地帮助着靖子与美里,将自己的爱无私地奉献给了她们,为她们计算好了一切出路。但他无法用理性计算到的是,靖子和美里是否能承受他如此沉重的爱情。石神可能从未考虑过这个问题。靖子与美里在承担杀人的罪恶感时,又要承担无法回报石神的爱的痛苦,明明石神那样的爱她为她付出,虽石神毫无所求,但是靖子还是无法让自己喜欢石神。最后靖子和美里都无法承受石神沉重的爱,选择了自首。没考虑到这一点,只能说是理性鬼才达摩石神一生的失误吧。

3.新浪新闻首页被黑产劫持

本周三,7 月 18 日,新浪新闻首页被黑产劫持几个小时,访问会跳转至某博彩网站。然后一些微信公众号的相关报道好像都被公关删除了hhh。新浪新闻虽然流量不必以前,但还是有的,被劫持几个小时可太强了hhh

4. 芝加哥大学不再要求报考生提供 SAT 与 ACT 成绩

6 月 14 日,报道称,芝加哥大学不再要求报考的本科生提供 SAT 与 ACT 成绩。校方认为,这会是实现学校的 diversity 的一个阻碍。不要求提供 SAT 和 ACT 成绩,以后再来找我亚裔细分的茬看你们还怎么找hhh,diversity 就完事了,管你亚裔屁事。

以上就是这周的见闻啦!新的一周也要元气满满哦w

项目进度

其实这个神经网络的架构我在几周前就搭好了,但有非常多的 bug,说好的数学推导因为没抽出时间来学 latex 而一拖又拖,打算等买了 iPad 以后用 iPad 直接画图(
在这里把 bug 先列一下,有时间慢慢改….

  1. 在多次学习后的误差和没有改变,初步判断导致这个问题出现的原因是权值没有改变
  2. 曾经权值能正常改变时,单次学习误差总是向 1 趋近,最后等于 1,也就是说各输出节点的输出均为 0,初步判断导致这个问题出现的原因是权值更新公式有一些问题。

Machine Learning 1.人如果没有梦想,和深度神经网络有什么区别

所谓机器学习,就是就是希望计算机能从一定量数据中学得一些知识。为了达到这一目的,人们使用计算机来模拟人的学习过程。我们小时候父母每天教我们说话,认识事物,就是学习的过程。通过高中生物的知识我们知道,我们并不是一生下来就有各种反射(对一些事物的应激)能力的,而是通过在后天的学习的过程中我们渐渐建立了许多神经元,这些神经元为我们处理刺激,并在大脑皮层(或其他正确的地方)产生正确的输出。那么,使用计算机搭建神经网络也是类似的方法,我们用 N 层神经元,每层神经元都有M 个神经元,除此之外我们还有输入层和输出层,每一层的神经元都要对前一层进行处理与向下一层传递。如图就是有两层神经元(我们通常称中间的层为隐含层,即两层隐含层)的神经网络。

其中,图中的每一条线都有它的权重,即这条线所对应的输入在该节点所占的比重。

机器学习通常可以简单地分为两类:监督学习和非监督学习。

监督学习顾名思义,就是在学习数据中告诉计算机正确的解是什么,就如同我们小时候被教的:这个是消防车,这个是警车,这个是坦克车。而非监督学习,就是只给出学习数据,不给出解,让计算机自行摸索其中的规律,就像我们小时候的:“结合原文分析作者在xxx时的内心想法”。

我们主要讨论监督学习,因为我只研究了这个orz

那么,我们知道我们的神经网络有输入,有输出,我们如何在输入与输出之间建立联系呢?我们需要一些非线性的函数来将我们的输入-输出曲线“掰弯”,因为对于我们生活中的多数问题,我们的解法往往是非线性的(这里可以参考这里的数据,先凑活看看超链接,等我攒够钱买了穷人版 iPad 再来画图(逃),因此我们在这里使用非线性函数来将曲线“掰弯”。常用的函数有 sigmoid , ReLU, Tanh。

接着,我们要开始训练该神经网络,我们先随机设置所有的权值,接着,我们使用一组训练数据跑一次,将得到的输出与期待输出做差得到误差,接着,我们以全部输出的误差的和对每个权重求偏导,得到每个权重对误差的贡献速率。我们希望该速率趋近于0,即误差最小。这个过程叫做误差反向传播(Back propagation)接着,我们调整权值,是误差对其的偏导数趋近与0。这个过程叫做梯度下降。


初次学习,如有错误,敬请斧正。

Machine Learning: 0.开篇

这学期的编程课老师留了一个使用BP神经网络(Backpropagation ,反向传播算法)进行对一组手写体数字的识别的作业。

老师给的资料有关于BP的简述和部分的代码实现(我打算先不看),还有神经网络的学习数据与测试数据。

去网上查了一下,发现好像以我现在的数学知识已经足以支撑机器学习的学习,那么就打算开一个新坑,自己实现一下BP神经网络,实现好后可能把所得的学习结构以api的形式或者是复制粘贴的形式放进一个 iOS app 中,在手机上识别数字,挺酷的w

但这个项目的名字还没想好,暂定为 UNKNOWN,欢迎提建议(逃

并查集(Disjoint-set Data Structure)

在广大的算法世界中,有一种神奇的算法(数据结构)叫做并查集,这个中文可能还是不很好理解,但看看它的英文大概就知道是什么了: Disjoint-set Data Structure。

顾名思义,这样的数据结构主要用来解决的是不相交的系列间的集合之间关系,如查找,合并等。

要实现并查集,我们需要实现三个功能

1、并:将相交的两个集合合并为一个集合

2、查:查找指定的元素在哪个集合中

3、集:将每个元素创建为集合

(至少我是这样理解的(逃

这样的话,对于所有元素,我们可以将他们分到各自所属的集合。

举个例子,A 与 B 是亲戚,B 与C 是亲戚,D 与 F 是亲戚,那么通过并查集操作,我们就可以将该例中的两个家族找出(ABC) 与 (DF)。


具体实现

这个实现应该是按照集查并的顺序实现的。

我们规定,所有的集合中,有且只有一个元素为这个集合的代表,这样集合就可以用树状结构来储存,所有元素的父亲都指向能代表他的元素(也就是说明这两个元素在同一集合),一个集合中的所有元素最终指向唯一元素,即该集合代表。那么我们可以用一个数组来储存每个元素的父亲,建立集合的操作即是将集合中的各个位置赋值为自己的下标,因为这时每个集合都只有一个元素。接着,查找的操作即为递归查找数组中值等于下标的元素所在的位置。合并两个集合只需将一个集合的代表指向另一个集合的代表,让另一个集合的代表来代表这两个集合就可以了

接着是一道题目:http://codeforces.com/problemset/problem/893/C

题目太长就只贴链接了

我最开始想的是用结构体将一个元素(人)的父亲和他的消费合在一起并存在数组中,但这样操作的话在后面的找集合中最小消费就比较麻烦,因为还要遍历整个树结构,后面干脆先另外开一个集合来存每个人的消费,后面再遍历整个数组来找到一个集合中的人的最小消费。

值得一提的是这道题的数据量较大,如果不优化并查集算法会时间超限,我这里只采用了比较简单的路径压缩优化,这个优化方法是每次在查找时,将查找的元素的父亲直接指向这个元素所在集合的代表,这样经过大量查找操作后,大多数元素都是直接指向它所在的集合的代表的,查找起来的时间复杂度也就成了O(1)。

#include <iostream>
#include <climits>
using namespace std;
int find_set(int * friends,int val) {//查
    if(friends[val] == val)
        return val;
    friends[val] = find_set(friends, friends[val]);//路径压缩优化
    return find_set(friends, friends[val]);
}
void union_set(int * friends,int x,int y) {//并
    int xRoot = find_set(friends, x);
    int yRoot = find_set(friends, y);
    friends[xRoot] = yRoot;
}
int main() {
    int peo,pair;
    int l_operand,r_operand;
    cin>>peo>>pair;
    long long cost[peo];
    int friends[peo + 1];
    long long findCost[peo + 1];
    
//    int find_index = 0;
    for(int i = 0;i < peo;i++)
        cin>>cost[i];
    for(int i = 0;i <= peo;i++){
        friends[i] = i; //建立集合的操作
        findCost[i] = LONG_LONG_MAX;
    }
    while(pair--) {
        cin>>l_operand>>r_operand;
        union_set(friends, l_operand, r_operand);
    }
    for(int i = 1;i <= peo;i++) {
        if(findCost[find_set(friends, i)] > cost[i - 1] ) {
            findCost[find_set(friends, i)] = cost[i - 1];
        }
    }
    long long res = 0;
    for(int i = 0;i <= peo;i++) {
        if(findCost[i] != LONG_LONG_MAX)
            res += findCost[i];
    }
    cout<<res;
    return 0;
}

因为军训….

因为军训,就没有保持在github上的每天学习了

从明天开始恢复(

btw,今年的目标再加一条:为了学习 Sam 大师的生物钟,从今天开始,今年努力让自己1点左右睡觉,7点左右起床,并且给自己50天不执行这个计划的天数。

今年的第一个水commit

这两天决定寒假的时候除了C++、算法、数据结构、数学、再额外学学Swift,毕竟用着苹果的电脑和手机,总想能给他们弄一些好玩的功能出来。学Swift 可以通过看斯坦福的iOS 11开发的视频来学。这个视频有斯坦福在itunes U上发布,而iTunes U因为政治原因,非常的不好用,最近发现在b站上有人搬运这个视频,并且在翻译它,我虽然不需要翻译,但我觉得翻译蛮酷的,所以就想加入他的翻译队伍。

这个翻译队伍实在github 上合作的,昨天我翻译了1h,将进度提交至我fork的仓库后发现这个提交没有被算在我的contributions 里面orz,大概是成功pull request 后才会算。
废话这么多,其实就是想说,因为这个昨天提交了一份水的commit (逃

好怀念高三

高三的时候告诉自己当前主要任务是读书,所以每次要学到很晚的时候就很有可能去吃个夜宵,然后读书就特别幸福

现在上了大学有了减肥的需求,每次晚餐稍稍早吃/少吃一点就会在晚上12点后特别的饿orz

然后还不能吃夜宵orz