Py学习  »  Python

如何用python构建简单神经网络?

人工智能学习指南 • 4 天前 • 19 次点击  

今天,我们将运用Python来搭建一个简单的神经网络模型!并深入浅出地探索其背后的运作原理。







多输入






提及神经网络时,我们可以将其视为一个高度灵活的函数来理解和应用。

为了做出准确的预测,我们需要构建能够同时组合多个输入的神经网络。,神经网络完全具备这种能力。

拥有多个输入意味着我们也将拥有多个权重,

我们的新神经网络将能够在每次预测时同时接受多个输入。

这使得网络能够结合各种形式的信息来做出更明智的决策,但使用权重的基本机制并未改变。

我们仍然会对每个输入进行处理,就像通过各自的“音量旋钮”一样。换句话说,我们将每个输入乘以它自己的权重。

这里的新特性是,由于我们有多个输入,我们需要将它们的各自预测值相加。因此,我们首先将每个输入乘以其对应的权重,然后将所有局部预测值相加。

这被称为输入的加权和,简称加权和。也有人称之为点积,我们稍后会看到这一点。







Python代码






weights = [0.1, 0.2, 0]
def neural_network(input,weights): pred = w_sum(input,weights) return pred
def w_sum(a,b): assert(len(a) == len(b)) output = 0 for i in range(len(a)): output += (a[i] * b[i]) return output

fingers = [8.5, 9.5, 9.0]wlrec = [0.65, 0.8,0.8,0.9]nfans = [1.2, 1.3, 0.5, 1.0]
input = [fingers[0], wlrec[0], nfans[0]]
prediction = neural_network(input,weights)
print(prediction)


我们使用Jupyter笔记本运行这个示例,旨在将启动成本降到最低。

Jupyter Notebook地址:

https://jupyter.org/try-jupyter/notebooks/?path=notebooks/Intro.ipynb


一个由WASM驱动的、在浏览器中运行的Jupyter。

接下来我们需要了解背后一个非常重要的逻辑概念——点积(Dot Product)。

我还为大家整理了一些我自己学习深度学习、神经网络用的的学习资料


大家添加小助手既可获取, 记得发送文章标题截图给小助手哦!









点积







理解点积(加权和)的工作原理及其背后的原因,是真正掌握神经网络如何进行预测的关键部分之一。

简而言之,点积能给我们两个向量之间相似性的概念。这在GPT等模型中尤为重要。比如这些例子:

代码


  • 两个完全相同的向量之间的加权和(w_sum(c,c))最大。

  • 相反,因为a和b没有重叠的权重,所以它们的点积为零。

  • 最有趣的加权和可能是c和e之间的,因为e有一个负权重,这个负权重抵消了它们之间的正相似性。

  • 但是,e与自身的点积会产生数字2,尽管e有负权重(双负变正)。

让我们来熟悉一下点积操作的各种性质。


点积的一些快速数学性质

有时,你可以将点积的性质等同于逻辑与(AND)操作。考虑a和b:

a = [ 0, 1, 0, 1] b = [ 1, 0, 1, 0]
  • 如果你问a[0]和b[0]是否都有值,答案是“否”。

  • 如果你问a[1]和b[1]是否都有值,答案仍然是“否”。

  • 因为这对所有四个值都成立,所以最终得分等于0。

  • 每个值都没有通过逻辑与的检验。

 b = [ 1, 0, 1, 0] c = [ 0, 1, 1, 0]

b和c之间有一个列共享了相同的值。这通过了逻辑与(AND)测试,因为b[2]和c[2]都有权重。

正是这一列(且仅这一列)使得分数上升至1。

 c = [ 0, 1, 1, 0] d = [.5, 0,.5, 0]

幸运的是,神经网络也能够模拟部分逻辑与(AND)操作,虽然这种表述不太准确。

在这个例子中,c和d与b和c共享同一列,但由于d在该列的权重只有0.5,所以最终得分仅为0.5。

在神经网络中建模概率时,我们会利用这一性质。

 d = [.5, 0,.5, 0] e = [-1, 1, 0, 0]

在这个类比中,负权重往往意味着逻辑非(NOT)操作,因为任何正权重与负权重配对都会导致分数下降。

此外,如果两个向量都有负权重(如w_sum(e,e)),则神经网络会执行双非(double NOT)操作,反而增加权重。

另外,你也可以说这是在逻辑与之后的逻辑或(OR),因为如果任何一行显示权重,分数就会受到影响。

因此,对于w_sum(a,b),如果(a[0] AND b[0]) OR (a[1] AND b[1])等成立,那么w_sum(a,b)将返回一个正分数。如果有一个值是负的,那么那一列就相当于执行了逻辑非。







阅读示例






这为我们提供了一种粗略地解读权重的方法。

这些例子假设你正在执行w_sum(input,weights),而这些if语句的“那么”部分是抽象的“那么给予高分”。

 weights = [ 1, 0, 1] => if input[0] OR input[2] weights = [ 0, 0, 1] => if input[2]


    
 weights = [ 1, 0, -1] => if input[0] OR NOT input[2]   weights = [ -1, 0, -1] => if NOT input[0] OR NOT input[2] weights = [ 0.5, 0, 1] => if BIG input[0] or input[2]

注意在最后一行中,weight[0] = 0.5意味着对应的input[0]必须更大才能补偿较小的权重。

非常重要的一点是,这些只是权重!




权重是“连接”神经元的线。







预测






预测本身不过是调整权重以匹配某个函数。

我们将深入探讨函数匹配的实际含义,神经网络做出预测时意味着什么呢?

weights = [0.1, 0.2, 0]
input = [fingers[0], wlrec[0], nfans[0]]
prediction = neural_network(input,weights)

粗略地说,它意味着网络根据输入与权重的相似度给输入打出高分。

请注意,在以下示例中,nfans在预测中被完全忽略,因为与之关联的权重为0。

最敏感的预测因子是wlrec,因为它的权重为0.2,但高分的主要因素是脚趾数量(ntoes),不是因为它的权重最高,而是因为输入与权重的组合值远高于其他。







结论






另外还有几个需要注意点:

你不能随意打乱权重的顺序,因为它们需要处于特定的位置。

此外,权重值和输入值共同决定了对最终得分的整体影响。

最后,负权重会导致某些输入降低最终预测值(反之亦然)。


大家觉得这篇文章有帮助的话记得分享给你的朋友、同学、闺蜜、敌蜜、死党!

B站:AI秃秃学长小墨



关注小墨

获取最新AI技能+最肝AI干货

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/174151
 
19 次点击