本文分为两个主要部分。第一部分较为通俗,主要介绍向量、矩阵和向量转置等基础知识。第二部分则涉及更复杂的数学推导,需要读者具备概率论、微积分和凸优化的知识。
本文旨在帮助读者理解AI安全背后的原理,特别是隐马尔可夫模型在Web安全异常检测中的应用。如果读者对AI安全感兴趣,希望通过本文了解其背后的逻辑,并将其应用于实际工作中,那么本文正是为你们准备的。
初次接触隐马尔可夫模型是在几年前,当时阅读了一篇关于数据科学在Web威胁感知中应用的文章。通过不断学习和实践,我深刻感受到了人与人之间智力的差距,同时也体会到了探索知识的乐趣。最近因工作需要,我重温了这些知识,发现很多细节已经遗忘,于是重新梳理了一遍,希望可以帮助更多人更高效地掌握这些内容。
假设我们有三个不同的骰子:
现在我们随机选择一个骰子,并连续投掷10次,得到一串数字:1 6 3 5 2 7 3 5 2 4。
如果我们不告诉读者我们每次选择了哪个骰子,只提供这串数字,那么这串数字就是观测序列。而我们每次选择的骰子则是隐含序列。
通过这个例子,我们可以引入几个关键概念:
接下来,我们修改假设,使骰子的选择更加复杂,例如:
我们将使用数学符号表示模型:θ=(A,B,π),其中:
假设已知模型θ=(A,B,π),求观测序列Y出现的概率P(Y|θ)。
已知观测序列Y,估计模型参数θ,使得观测序列出现的概率P(Y|θ)最大。
已知模型θ和观测序列Y,求最有可能的隐含序列Z。
通过隐马尔可夫模型,我们可以实现Web请求参数的异常检测。假设有一个Web API,其中包含正常和异常的请求数据。
例如,以下是正常请求:
json
{"id":"12334", "email": "zhangsan@xx.com"}
{"id":"14352", "email": "lisi@xx.com"}
{"id":"27988", "email": "wangwu@xx.com"}
以下是异常请求:
json
{"id":"67123' union select 1,2,3", "email": "asdf@xx.com"}
{"id":"67123", "email": "asdf@xx.com\"<img src=1 onerror=alert('xss')\>"}
{"id":"67123", "email": "asdf@xx.com' and 1=1-- a"}
正常请求的参数值相对相似,而异常请求的参数值差异较大。通过计算学习到一个模型,可以有效地识别异常请求。
求解隐马尔可夫模型的学习问题,需要用到EM(期望最大化)算法。具体步骤如下:
本文通过一个简单的骰子游戏类比,介绍了隐马尔可夫模型在Web安全异常检测中的应用。由于参考了多个资料,符号和推导过程有所不同,但目的是为了更好地理解和应用这些概念。
本文仅作为一个入门指南,如果读者希望深入了解,可以查阅文末提供的参考文献。如果有时间,未来还会撰写更多关于HMM在大数据实时计算中的应用的文章。