Engee 文档
Notebook

人工神经元

人工神经元是人工神经网络的一个节点,是自然神经元的简化模型。它的功能是将所有输入信号的线性组合转换成某种非线性函数,并将结果传输到一个输出端。人工神经元通过将一些神经元的输出与另一些神经元的输入连接起来,从而组合成网络。它们是理想神经计算机的基本要素。人工神经元和网络可用于各种实际应用,包括预测任务、模式识别和控制。它们可以通过简单处理器之间的相互作用执行复杂任务。人工神经元可以在生物环境中工作,是由人工元件和生物元件组成的生物混合神经元。然而,使用这种模型会引发严重的道德、社会和伦理问题。神经元公式的一般观点可表述如下:

y = ∑w * x + b

其中

y 是神经元的输出信号、

w - 输入的权重系数、

x - 输入值、

b - 偏差、

该公式描述了输入值乘以相应加权因子再加上偏置的线性组合。神经元根据所得值的符号对输入数据进行分类

本示例使用一个神经元和两个加权因子实现了一个简单的神经网络训练模型。输入数据被分为两组,然后根据目标值对两组进行训练。

训练过程持续 100,000 次迭代,期间根据预测误差更新权重。训练完成后,用新数据对模型进行测试,并绘制结果图。

In [ ]:
# Определение параметров сети
bias = 10
WT1 = 0.1
WT2 = 0.1
step = 0.05

X1 = [0.323, 0.45, 0.33, 0.22]
X2 = [0.9, 0.76, 1.3123, 1.17]
X = vcat(X1, X2)

Y1 = [0.67, 0.445, 0.633, 0.312]
Y2 = [0.112, 0.22, 0.35, 0.42]
Y = vcat(Y1, Y2)

rezult = [0, 0, 0, 0, 1, 1, 1, 1];
In [ ]:
# Обучение
for i in 1:100000
    for j in 1:8
        r = (WT1 * X[j] + WT2 * Y[j] > bias) ? 1 : 0

        if r < rezult[j]
            WT1 += step
            WT2 += step
        elseif r > rezult[j]
            WT1 -= step
            WT2 -= step
        end
    end
end
In [ ]:
# Тест
test1 = [0.431, 0.6954, 0.12, 0.71]
test2 = [0.444, 0.43, 0.23, 0.3213]
output = Vector{Int}(undef, 4)

for k in 1:4
    output[k] = (WT1 * test1[k] + WT2 * test2[k] > bias) ? 1 : 0
end

# Вывод результатов и построение графика
allweight = [WT1, WT2]
define_line(x, weights, bias) = (-weights[1] * x .+ bias) ./ weights[2]
println("Output: ", output)
Output: [0, 1, 0, 1]

从测试结果中我们可以看到,有两个点属于第一类,还有两个点属于第二类。让我们画一张图来直观地显示分类结果。

In [ ]:
plot(X1, Y1, seriestype = :scatter, label = "Class 0", color = :blue)
plot!(X2, Y2, seriestype = :scatter, label = "Class 1", color = :red)
plot!(test1, test2, seriestype = :scatter, label = "Test", color = :green, marker=:circle)

x_vals = range(minimum(X), stop = maximum(X), length = 100)
y_vals = define_line(x_vals, allweight, bias)
plot!(x_vals, y_vals, label = "Decision Boundary", color = :black)
Out[0]:

结论

在这个例子中,我们从简单的层面分解了神经元的结构。它是构成卷积神经网络等更复杂神经网络的基本元素之一。