江寒叫来服务员,和自己一起,把老江架了起来。
很快来到预定的套房里。
江寒将老江扔到大床上,又拉过一条薄被,给他盖上了。
随后,他就坐在沙发上,打开手机,给夏雨菲发了条微信。
“我这边已经搞定了,你那边呢?”
过了一会儿,夏雨菲回复:“差不多了,我刚把妈妈哄睡……咱们交换下情报?”
江寒呵呵一笑:“那必须啊。”
夏雨菲马上给江寒拨了个语音通话。
两人将打听到的线索,往一起一拼合,事情的来龙去脉,就更加清楚了。
可惜仍然不知道,当年那个第三者到底是谁……
“接下来怎么办?”夏雨菲问。
江寒沉吟了一下:“咱们俩该干嘛干嘛,至于你妈妈,还有我家老江……他们俩的事情,让他们自己去处理。”
夏雨菲迟疑着问:“这样真的好吗?”
俗话说,关心则乱。
她现在的状态,说好听点,叫患得患失;说的直接点……
江寒呵呵一笑:“不然呢?”
这种事情,过分干预的话,往往适得其反。
所以,直接插手是不可能的,顶多推波助澜……
夏雨菲迟疑了半晌:“好吧,我听你的。”
……
又聊了一会儿后。
“那个……”夏雨菲欲言又止。
江寒问:“怎么了?”
夏雨菲一咬牙:“如果你将来……如果你将来,喜欢上了别的女孩子,或者做出了对不起我的事情,我也一定会学妈妈,转身就走!”
江寒“嗯”了一声,平静地说:“我记住了。”
夏雨菲沉默了一会儿,语气转柔:“不过我也一定,一定会给你一个机会,跟我解释清楚。”
如果通过解释,消弭了误解,那自然啥事也没有。
如果他的解释,实在无法让人满意,那就……
那就再给他一个机会,重新解释呗。
当真决绝地离开?
只怕自己还真有点办不到!
当然,这个就不用告诉他了,自己心里有数就行……
江寒点了点头,说:“这样很好。”
两人又聊了一会儿。
见时间已经不早,江寒就和夏雨菲互道晚安。
然后随便洗了洗,在老江隔壁,将就着躺了下来。
临睡前,江寒又打开手机,随意浏览了一会儿。
他主要关注的,是机器学习方面的最新进展,和一些行业上的消息。
可惜心里有点不净,总是想到老江、夏如虹的事情……
大约二十分钟后,江寒忽然看到了一则消息。
ISLVRC2013已经开始接受报名,并开放了数据下载端口。
江寒不由得精神一振,总算等到了!
ISLVRC,全称ImageNetLargeScaleVisualRecognitionChallenge,中文名称“大规模视觉识别挑战”。
但其实,就是个图片分类比赛……
ISLVRC使用了ImageNet的一个子集。
ImageNet是一个相当庞大的图像识别数据库,由斯坦福大学模拟人类的识别系统建立。
有超过1400万的图像,以及相应的标签,共包含2万多个类别,一个典型的类别中,往往包含数百个图像。
这次的比赛中,ImageNet提供的训练集,共包括12万多张图片,以及对应的标签。
验证集则是张图片和标签。
至于最终挑战的测试集,则包含了10万条数据,分属于1000个不同的类别。
这么大规模的数据集,制作起来成本高昂得惊人,全世界也没有几个。
对于研究机器学习的人来说,这个比赛可是不容错过的。
江寒马上就报了名,并利用会馆的WIFI,开始下载数据集。
只是,手头并没有电脑,怎么进行编程呢?
江寒沉吟了一下,马上进入了虚拟空间。
这里可是有一台随时可以使用的286。
虽然型号特别原始,性能落后了点,也不能调试、编译神经网络。
不过,自己完全可以用文本的方式,先把代码敲进去,保存好。
明天再找个时间,发送到真实电脑上,调试、修改、编译,然后上传到服务器上训练……
此外,这样做还有一个莫大的好处,那就是可以节省大量的时间。
毕竟在这里工作100个小时,外面只过去大约1个小时……
江寒思考了一会儿,很快就有了大概的思路。
首先,既然是图像识别,那么最适合的模型,自然是卷积神经网络CNN了。
以CNN为基础,打造一个深度学习网络,再进行一番优化,结合一些小技巧,大概率能取得极其优秀的成果。
江寒设想了一个多达十几层的卷积神经网络。
首先是输入层。
输入的图像数据,是n×n×3的RGB彩色图像,所以这一层的数据格式,可以定义为一个三维数组。
接下来是卷积层。
对于卷积神经网络来说,这自然是重中之重。
江寒花费了很大的心血,终于设计出一个全新的结构。
通过反复地卷积、池化和标准化,一步步提取图像的特征……
经过前面这些步骤,需要处理的神经元个数,和输入层相比,已经减少了很多。
接下来,就可以把数据送进全连接层,用softmax函数进行分类了。
最后还要有个输出层,对应1000种分类标签……
确定了大体思路之后,江寒又设计了一下网络的具体结构。
比如,应该有几层卷积层,每一层如何实现……
一般的神经网络里,激活函数主要使用Sigmoid和Tanh(双曲正切)函数。
但这两个函数……
在网络层次较浅时,问题可能还不是很大,网络层次一深,就容易梯度爆炸或者梯度消失。
江寒在研制OCR软件的时候,就发现了这个问题,所以这一次,他准备引入ReLU,作为卷积层的激活函数。
ReLU(RectifiedLinearUnit),一般称作“线性整流函数”,也可以翻译成“修正线性单元”。
这个函数其实很简单,表达式为F(x)=max(0,x)。
当自变量大于0时,它就是一个线性函数,相当于一次函数y=x;
当自变量≤0时,y≡0。
这个函数其实不是什么新鲜东西,只是在机器学习中,以前没人用过罢了。
所以这也算是一点小小的创举……
要说ReLU的好处嘛,那自然是不少的了。
一方面,可以有效缓解梯度消失、梯度爆炸。
并且,还能让梯度下降得更快,有效地提高训练效率。
另一方面,也比较符合仿生学原理。
生物神经细胞的工作模式,就和这个函数差不多……
江寒思考了一下,又在网络的最后几个全连接层中,使用了Dropout方法。
所谓Dropout,就是在前向传导时,以某个概率P,随机忽略部分神经元。
这样做,可以有效地避免过拟合。
在编写池化层时,江寒考虑了一下,使用了重叠的最大池化方法,而没有使用他此前在CNN论文中提到的平均池化。
因为后者有个副作用,容易导致模糊化。
同时,这样做还有另外一些好处。
比如,由于有部分重叠和覆盖,提取出来的特征,往往也会更加丰富……
在编写标准化层的时候,江寒考虑再三,运用了LRN机制,也就是局部响应归一化。
这样做的目的,是让局部神经元的活动,产生某种竞争机制,使得强者愈强、弱者愈弱。
归根结底,是为了提高模型的泛化能力。
为了尽可能加快训练速度,江寒甚至考虑过使用GPU编程。
虽然这个世界的GPU厂商,还没有发明CUDA技术,但硬件条件已经完全具备了。
毕竟从理论上来说,能挖矿的显卡,就能用于大数据计算。
只要编写出合适的驱动和代码,就能利用GPU,来进行大规模并行运算,显着地提高神经网络的训练速度。
可惜的是,单个显卡的显存比较有限,也就是说,可能承载不了太大的人工神经网络。
而这个深度CNN网络……
即使最保守的估计,也需要4~5GB的显存。
这样一来,就必须用两块显卡,交下火才行了……
江寒在虚拟空间中忙碌了几十个小时,终于把这个空前巨大的人工神经网络搭建了起来。
当然,今天是没法开始训练了,只能等到明天再说……
江寒想了想,又买了很多空白图纸,以及一些中性笔,开始草拟论文的初稿。
在这次的比赛中,没啥意外的话,自己这个“深度卷积神经网络”,应该能拿到不错的成绩。
到时候,万一有需要的话,现写论文就显得有点不够从容了。
所以江寒决定,今晚就把这个网络的框架,写成论文,保存起来。
等到训练完成,收集到足够的数据,再稍微修改下,就可以找个合适的时机,投出去了……