📜  神经网络|初学者指南

📅  最后修改于: 2021-04-16 08:34:22             🧑  作者: Mango

神经网络是受生物神经网络启发的人工系统。这些系统通过暴露于各种数据集和示例来学习执行任务,而无需任何特定于任务的规则。这个想法是,系统可以根据传递的数据生成识别特征,而无需对这些数据集进行预编程的理解即可对其进行编程。

神经网络基于阈值逻辑的计算模型。阈值逻辑是算法和数学的结合。神经网络要么基于对大脑的研究,要么基于神经网络在人工智能中的应用。这项工作导致了有限自动机理论的改进。

典型神经网络的组成部分涉及神经元,连接,权重,偏差,传播函数和学习规则。神经元将收到输入p_j(t)来自具有激活作用的前神经元a_j(t) , 临界点$\theta$_j ,激活函数f和输出函数f_{out} 。连接由连接,权重和偏见组成,它们决定了神经元的方式$i$将输出传输到神经元$j$ 。传播计算输入并输出输出,并将前神经元函数与权重相加。学习规则修改网络中变量的权重和阈值。

有监督与无监督学习:
神经网络通过监督学习来学习;监督机器学习涉及输入变量x和输出变量y 。该算法从训练数据集中学习。有了每个正确的答案,算法就会对数据进行迭代预测。当算法达到可接受的性能水平时,学习将停止。
无监督机器学习具有输入数据X,没有相应的输出变量。目的是为数据的基础结构建模,以进一步了解数据。监督机器学习的关键词是分类和回归。对于无监督的机器学习,关键字是聚类和关联。

神经网络的发展:
希伯来语学习涉及神经可塑性。希伯来语学习不受监督,并且涉及长期的增强作用。希伯来语学习涉及模式识别和“异或”电路;处理if-then规则。

反向传播解决了Hebbian学习无法处理的异或问题。这也允许多层网络是可行和有效的。如果发现错误,则通过修改每个节点的权重来解决每个层的错误。这导致了支持向量机,线性分类器和最大池化的发展。消失的梯度问题会影响使用反向传播和递归神经网络的前馈网络。这就是所谓的深度学习。

基于硬件的设计用于生物物理模拟和神经营养计算。它们具有大规模的成分分析功能,并且卷积创建了具有模拟功能的新型神经计算。这也解决了多层前馈神经网络的反向传播问题。

卷积网络用于在卷积层和最大池化层之间交替,而连接层(完全或稀疏连接)与最终分类层相连。学习是在没有监督的情况下进行的。每个过滤器等效于必须训练的权重向量。位移方差必须确保处理大型和大型神经网络。开发网络中正在解决此问题。

神经网络的类型

可以使用七种类型的神经网络。

  • 第一个是具有三层或更多层并使用非线性激活函数的多层感知器。
  • 第二个是使用多层感知器变体的卷积神经网络。
  • 第三个是使用权重进行结构化预测的递归神经网络。
  • 第四个是递归神经网络,该神经网络以有向循环在神经元之间建立连接。长短期记忆神经网络使用递归神经网络架构,并且不使用激活函数。
  • 最后两个是序列到序列模块,该模块使用两个递归网络和浅层神经网络,这些浅层神经网络从大量文本中产生向量空间。这些神经网络是下面演示的基本神经网络的应用。

对于该示例,神经网络将使用三个向量:属性X的向量,类Y的向量和权重W的向量。代码将使用100次迭代将属性拟合到类中。通过权重向量W迭代后,生成预测,加权并输出预测。神经网络处理反向传播。

例子:

Input :
X { 2.6, 3.1, 3.0,
    3.4, 2.1, 2.5,
    2.6, 1.3, 4.9, 
    0.1, 0.3, 2.3,};
y {1, 1, 1};
W {0.3, 0.4, 0.6}; 

Output :
0.990628 
0.984596 
0.994117 

下面是实现:

import numpy as np
  
# array of any amount of numbers. n = m
X = np.array([[1, 2, 3],
              [3, 4, 1],
              [2, 5, 3]])
                
# multiplication
y = np.array([[.5, .3, .2]])
  
# transpose of y
y = y.T
  
# sigma value
sigm = 2
  
# find the delta
delt = np.random.random((3, 3)) - 1
  
for j in range(100):
    # find matrix 1. 100 layers. 
    m1 = (y - (1/(1 + np.exp(-(np.dot((1/(1 + np.exp(
                   -(np.dot(X, sigm))))), delt))))))*((1/(
                       1 + np.exp(-(np.dot((1/(1 + np.exp(
                   -(np.dot(X, sigm))))), delt)))))*(1-(1/(
                       1 + np.exp(-(np.dot((1/(1 + np.exp(
                   -(np.dot(X, sigm))))), delt)))))))
                     
    # find matrix 2
    m2 = m1.dot(delt.T) * ((1/(1 + np.exp(-(np.dot(X, sigm)))))
                    * (1-(1/(1 + np.exp(-(np.dot(X, sigm)))))))
    # find delta
    delt = delt + (1/(1 + np.exp(-(np.dot(X, sigm))))).T.dot(m1)
      
    # find sigma
    sigm = sigm + (X.T.dot(m2))
      
# print output from the matrix
print(1/(1 + np.exp(-(np.dot(X, sigm)))))
输出:
[[ 0.99999294  0.99999379  0.99999353]
 [ 0.99999987  0.99999989  0.99999988]
 [ 1.          1.          1.        ]]

局限性:
神经网络用于监督模型。它不处理无监督的机器学习,也不对数据进行聚类和关联。它还缺乏在计算上更昂贵的神经网络中可以找到的准确性水平。基于Andrew Trask的神经网络。而且,神经网络不适用于X的行数和列数与Y和W的行数不匹配的任何矩阵。

下一步将是创建一个无监督的神经网络,并通过更多的迭代和线程来增加该监督模型的计算能力。

资源:

  • http://neuralnetworksanddeeplearning.com
  • https://skymind.ai/wiki/neural-network
  • http://pages.cs.wisc.edu/~bolo/shipyard/neural/local.html
  • https://iamtrask.github.io/2015/07/12/basic-python-network/