本人外贸狗一枚。 外贸惨呐,白天联系车间生产,晚上回家和国外客户沟通。TMD老板还要求每天在alibaba发30个listing。你说好好的一个销售,有业绩不就行了,居然还有这种KPI,真是是可忍孰不可忍。
不过这也难不倒我,拿出当年大航海时代,从伊比利亚半岛开船去北非海岸挖矿的精神,重新拾起按键精灵开始发产品。(看,谁说网游害人,大航海时代ol不就教会我用脚本采矿么。。。呃,呸,是提高生产效率)
一入豪门深似海,动起了偷懒的歪念头,慢慢的python、selenium也就学起来了。虽然产品发地快了,alibaba会提示输入验证码。但就算慢一点发,一晚上发上千个listing还是很轻松的,一天30个的KPI?哼,米粒之珠,也敢与日月争辉。
虽然发listing方便了,但验证码这个问题也在心里埋下了根刺,上星期手贱又百度了下,结果发现训练围棋AlphaGo的tensorflow居然可以识别验证码,网上还这么多的教程。对于我这个专业文科30年的大叔来说,这么高端酷炫屌朝天的东西,这么多教程居然触手可得,必须得果断入坑。
嗯,真实感受就是入坑,因为我找了很多教学视频,感受都是这样:
大神:好了,我们开始从头开始讲解,首先,1+1=2,2+2=4,……
我:很简单嘛,喝口水先。
大神:所以,@#¥%&*!#¥%&*!##¥#……
我:等等,我忽略了什么?赶紧后退重听。嗯,果真每个音都听到了,只是完全不知道这个音对应哪个词而已。
于是,就有了写这个文章的动力,因为大概一个星期的时间,6天都在找能看的懂的资料,剩下1天才用来初步了解神经网络是什么一回事。所以我把这一个星期找到的,对于我这个初级者有用的资料整理出来,帮助和我一样的老年文科生零基础入门。
既然是零基础,有多零呢?这么说吧,一个小时前,我还在看学而思的高中数学视频,正看到点到直线的距离公式。
嗯,高中,嗯,捂脸。。
所以,真的很零。
一、Python入门
既然是编程,那编程语言一定要会一门。不要挑了,人生苦短,你要学Python。这里推荐传智播客的视频教程
我是在youtube上看的,传智播客的Python14天基础班。如果不能科学上网,估计其他的网站也有。
网上的教程很多,但要么是大神讲天书,跳过N多我们不理解的步骤,要么是玩票兴致,几分钟浅进浅出、科普而已。传智播客的N个教程,感觉都很好,是真的把人当傻子般系统的教学。从 cd dir查看目录等系统操作教起,而且整个基础班系列只要14天就可以学完。每天不过2个多小时。
二、如何理解神经网络
不过既然从百度中搜到这篇文章,你肯定已经会python等语言了。那么首先推荐看一下周莫烦的教学视频:Tensorflow 搭建自己的神经网络 (莫烦 Python 教程)
从第一集“什么是神经网络”看到第6集“如何安装tensorflow”就好了,一集5分钟,半小时看完。后面的视频是给有一定基础的人看的,直接看就会像我一样,云里雾里,对自己的智商产生深刻的怀疑。
这也是很多大神视频的通常情况,他们通常会省略那些“傻子”都会的问题,但对于我这种文科生而言,傻子呓语亦犹如天书。
连续看了4 5个人的视频,没一个我能看懂。每一个都是上一集在讲如何安装tensorflow,下一集就手把手的教你写2层神经网络。我还不知道什么是神经网络,什么是神经元啊!怎么就讲起如何构建2层神经网络了。而且为啥是2层、不是3层?不是1层?怎么一言不合写代码了。。。而且是一边写代码,一边随口解释,写完代码教程就结束了??真真是感受到了理科世界的恶意。。。
然后本来都要放弃了,幸好发现了这片文章:
神经网络入门----阮一峰的网络日志
看完这篇,我才知道了,神经网络到底是怎么回事,才知道大神们在视频中到底是做什么。。。
这篇文章的主要内容来自:
Neural Networks and Deep Learning
在辛辛苦苦的看了半天英文版之后,突然想起来,这是1年前的教材,肯定有人已经翻译了啊,于是又在CSDN上找到了中文翻译版:
《神经网络与深度学习》
20个积分就可以下载,记住,不要下载那个便宜的、冒充中文版的PDF,现在的人真是没底线啊,可怜我一共才几十个积分。。。
三、思路与实现
其实看了上面的神经网络入门,就应该有了基本的神经网络思路了。我们再拓展一下,假设周末出门,我们有3个种选择,
y1去正大广场看LOL比赛,
y2去植物园踏青,
y3楼下花园散步。
影响我们判断的因素还是
x1天气情况,
x2交通情况,
x3是否有人相陪。
以及x1 x2 x3因素的权重W、负阈值b等。(如上图所示)
同样是下雨,对于我去看室内比赛 和 野外踏青的影响是不同的,所以权重W不同。每件事情在我心里的重量不同,所以阈值b不同。
即,3个y是对应着3组不同的(w1 w2 w3 b),即
y1 = w1,1 * x1 + w1,2 *x2 + w1,3 *x +b
y2 = w2,1 * x1 + w2,2 *x2 + w2,3 *x +b
y3 = w3,1 * x1 + w3,2 *x2 + w3,3 *x +b
假设:
在过去的一年中,有52个周末,我作出了52次选择。这52次选择就是y1 y2 和y3;这52个周日的天气情况、交通状况、朋友相约次数这3个x都记录在案。那么神经网络会根据y 和 x 通过反复计算,获得每个y对应的3个W 和1个b的值。
那么,下一个周末,给出天气、交通、朋友这3个x1 x2 x3 ,神经网络就可以用套上9个W 和3个b,计算出y1,y2,y3的值,最大的那个y就是我周末的最优选择。
同理,城市预测周末出行人数,也是这个道理。
sigmoid函数
好,在看神经网络入门中,会产生一个疑问,可以用简单的1 和 0来表示x吗?比如,有没有朋友相约,有就是1,没有就是0。但如果是天气,晴天、阴天、刮风、下雨,对于我周末出门选择是有不同的影响,不能用简单的1和0表示。入门中,介绍了sigmoid函数。可以用sigmoid函数,计算晴天阴天刮风下雨等情况,给出一个0-1的天气值作为那个x1。
softmax函数
但神经网络入门这篇中只举例一个情况,去不去参加动漫展览,即只有一个y。那只要Y大于0,就可以去看动漫展览了。
但实际情况更可能是上面我举的例子,周末有y1 y2 y3等多种选择。如果y1=30,y2=10,y3=2。我们当然是选y1。但如果y1=30,y2=28,y3=9,让我们做选择,在一年的52个周末里,我们真的是选择52次y1,而不去选择一次y2吗?
真实世界中,如果两件事差不多,y1=30 y2=28,我们恐怕会去踏青几次吧,而不是100%选lol。
那30,10,2,或者30 28 9这样的数值中如何选择最合理的最大值呢?这里就是softmax软最大值函数的舞台了。
关于softmax可以看一下极客学院的MINIST机器学习入门,然后再百科下,更详细。softmax可以根据每个值的大小,推算出概率,比如30 10 2中,30的概率是0.999999,无限接近于1了;而 30 28 9中,30的概率0.88,28的概率0.11,9无限接近0。
理解了神经元工作方式,和sigmoid、softmax等函数。就可以用tensorflow完成这个思路了。
四、大数据与矩阵
上面说过,一年中,我们有52个周末的记录,即52个 y1y2y3 和52个 x1x2x3。那我们怎么输入这么大的数据计算呢?
总不能手打这52*3个公式吧?如果是一个城市,几十万个出行数据需要计算,手打几十万个y=wx+b,还不要累死?
这就涉及到数据是怎么在电脑中储存的。
假设只有一个影响因素x,一个选择y:
即,y = w*x +b
一年52个周末,外出用1表示,家里蹲用0表示,那么y就是一个由0和1组成,共52个0和1的列表—— [0,0,……,1,1]
(试着想象一个excel表格,第一个格子写着出行记录,后面跟着52个格子,分别写着0,0,……0,1,1)
x天气情况是[0,0.3,……,0,0.9] (共计52个0-1之间的数值)
权重Weights是w,负阈值是 b 。
所以我们只要有一种运算方式,可以计算w* [0,0.3,……,0,0.9] + b 的值(w*x+b),
并且电脑经过反复猜测w、b的值,
最终使得 w*[0,0.3,……,0,0.9]+b 约等于y的[0,0,……,1,1] 了,
那么就求出权重和负阈值了。
这种1个数和一组数、一组数和另一组数之间的加减乘除就是矩阵了。
还是解释的太烂,推荐走起。
首先是 阮一峰的网络日志 理解矩阵乘法,这个真的很不错,必看。
然后是 B站上学而思的60小时学完高中数学,推荐全部看完,但如果你和我一样,白天晚上都要挤时间,那就看41-45好了,不做习题的话1个小时就可以看完。
最后是 18张宇线性代数基础班+强化班,看第8P就可以了,半小时。
看完后,数学方面矩阵的内容就初步了解了。剩下的就是怎样在编程中怎么实现对应的操作。比如,两个数字相乘,在电脑中用*星号表示“乘”,两个矩阵相乘,用np.matmul(w,x)表示。
这里推荐周莫烦的 Numpy & Pandas (莫烦 Python 数据处理教程)
只看前半段Numpy就可以了。Numpy是关于python中矩阵操作的库。也很快,1个小时吧。
其实他还有个matlibplot画图教学,也挺有意思的,推荐顺便看下。
五、最后实践
好,那到这里,你应该已经基本可以独立完成神经网络的入门MINIST操作了。MINIST包含了6+1万个手写阿拉伯数字,来自美国人口普查局2组共计500人的手写记录。
手写文字识别、人脸识别之类的事情对于人类来说很简单,睁眼就会。但对于传统编程来说,这事难于登天。所幸机器学习解决了这个问题。
在所有机器学习的项目中,手写文字识别最经典,也对电脑配置的要求最低,我是一台air上网本,没有GPU,识别MINIST也就是7 8秒的事。所以MINIST被各个教材、视频用来入门教学。
所以,如果之前的视频你都多看几集,那么tensorflow的基本操作Variable, Placeholder,feed_dict等等你应该已经都会了。可以自己动手完成MINIST了。
如果没看,推荐youtube上炼数成金的tensorflow十课中的第二课,讲的是创建变量、占位符、fetch、feed等,不能上外网的话,周莫烦的视频中也讲了一部分。
不过他们都是只讲了自己代码中用到的部分,这里有个博客tensorflow基础命令,写的比较全。
学会基本操作,再结合上文的《神经网络与深度学习》和极客学院的MINIST机器学习入门,应该是真的、真的、真的零障碍入门了。
当然,你也可以像我一样,从廖雪峰的官方网站上下载一段pillow代码,自己生成0-9的随机数字,自己破解,更有意思。感觉自己就要破解验证码,当上CEO,迎娶白富美,走上人生巅峰了。想想还有点小激动呢!