社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

人工智能学习指南 • 3 月前 • 125 次点击  

今天,我们将运用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
 
125 次点击