神经网络:请不要开始就让我sigmoid(wTx),谢谢!
副标题[/!--empirenews.page--]
神经网络:请不要开始就让我sigmoid(wTx),谢谢!引子学习机器学习,翻阅了一些神经网络的文章,上来就是sigmoid (
摸打滚爬刚开始看机器学习的时候,真的是乱七八糟。 惊呼一声:哇!就这么简单!11行代码可以实现2层的神经网络! 网上找找,基本上没有人提;大部分是对每层
当想要控制一样东西,试来试去都没有效果的时候,最好的方法大概就是把它丢到九霄云外,因为能力还没有达到。所以,出去游玩一趟,拍拍美景,吃吃美食,写写歌曲,画画生活。该干嘛干嘛。 用三脚猫功夫刷图模型宕开一笔,之后我们再梳理WTx。起初在神经网络之前,是被隐马可夫链吸引到机器学习的。因为以前写编译器的时候都是LL(k)的状态机在大脑里乱跑。既然是状态机,你就给我自己学习,自动把一个顶点连到另一个顶点呗。 马可夫链模型还是比较好理解的,一个状态,跳到另一群状态;对跳到某一个状态进行分析,就是这个状态下,输入的符号对应跳到下一个状态的频率,哪个最高就往哪跳。举起一个栗子: hello"world"123 我们假定P是开始,S是字符串,X是其他,那么上面的输入经过识别得到的输出应该是: XXXXXSSSSSSSXXX 这个例子如果在机器里学习10000遍;就有10000遍从o到”之后字符串开始,系统就会知道大概”是字符串的开始。到一下个1,系统就又会知道大概字符串到这里结束;当然,这个例子里系统会认为1是字符串的结束,而不是”。我们可以看下统计数据: 所以频率N(P->X | h) = 100%,N(X->S | “) = 100%,N(S->X | 1) = 100%,按照经验,如果次数很多,频率可以近似表示概率p(P->X | h) 约等于 N(P->X | h),那么我们就可以把这个数据拿去为其他数据作标记。不过这样标记字符串是按照(“,1)作开始和结尾的。要想让机器知道”是结尾,就得把所有字符都学习一遍”a,“b,“c,…,“A,… “1,“2,… 不管这个模型好不好,至少我们有了让机器自己学习的初步方法,就是计算频率。 隐马可夫链就是再复杂点,就是让一个观察到的标记可能对应不同的状态。还是用刚才的例子: hello"world"123 XXXXXSSSSSSSXXX 在S->X上,把所有状态都学习一遍是要精心设计学习的数据的,有没有一劳永逸的办法呢?平时书里的天气那个例子没那么明显,隐状态和观察状态之间重叠比较多,看得有点晕;那么我们把这里的S这个状态分裂成两个隐藏状态S1和S2,就是说S1和S2对应的输出都是S,但是分成两个内部状态。”使X状态变为S1状态,标记字符串开始,就是” -> (X->S1);为了让”标记字符串结束,” -> (S1->S2)且 任意字符->(S2->X)。这样隐状态和观察状态的意义就比较清晰了。后面就是找一本隐马可夫链的书,看一看viterbi找最大概率路径算法和Baum-Welch无监督学习算法。 当然,值得一提的是在隐马可夫链中,p(状态2 | 状态1,符号)不容易算出来,所以很多时候会用到贝叶斯的全概率公式,说白了就是等式变换一下: 上面扯了这么多,意义何在?在隐马可夫链的学习算法中用到全概率公式的知识,那么这种学习就是生成式;生成式需要大量数据去训练模型。而另一种叫作判别式,就是刚才说的p(状态2 | 状态1,符号),虽然计算它不容易,但是想个近似的简单方法估计一下还是可能的,所以p(状态2 | 状态1,符号)的计算在人为定义下和WTx产生了关系,这就是用线性模型去估计概率。 没学会走就开始跑,摔跤是自然最初看隐马可夫链,直接就用起来了。对,就是那个Baum-Welch算法,管它三七二十一,直接把(word,tag)放在一个pair里,输入,然后训练,很长时间得不到结果… 耐不下性子等学习是个不好的习惯。可是突然就遇上了CRF(Conditional Random Field,条件随机场)。从一篇CRF的PPT里才知道sigmoid使用的由来: 变形以后: 我们再看看sigmoid函数: 就是了,人为定义: 所以sigmoid原始是用于二分类问题的。 多分类问题,对于LR(Logistic Regression)一般就要使用softmax: 那么之后隐马科夫链模型也很好表述了:输入是(当前符号,前一个符号,前一个状态),第1层就是得到当前应该跳转到的状态,也就是在输入的前提下,当前符号该分在哪类里;第2层就是将这个状态标记为输出,就是当前确定的这个状态分在哪类,即对应了哪个标记。整个最简的CRF表示的隐马可夫链也可以十几行代码搞定: (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |