人工神经元
人工神经元是人工神经网络的一个节点,它是天然神经元的简化模型。 它作为所有输入信号的线性组合的非线性函数,其结果被传输到单个输出。 人工神经元通过将一些神经元的输出与其他神经元的输入连接起来而联网。 它们是理想的神经计算机的基本要素。 人工神经元和网络用于各种实际目的,包括预测,模式识别和控制任务。 由于简单处理器之间的相互作用,它们可以执行复杂的任务。 人工神经元可以在生物环境中操作,并代表由人工和活组分组成的生物神经元。 然而,这种模式的使用引发了严重的道德,社会和伦理问题。 神经元公式的一般形式可以表示如下:
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)
从测试结果中我们可以看到,第一类中包含两个点,第二类中还有两个点。 让我们构建一个图表来可视化分类结果。
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]:
结论
在这个例子中,我们在一个简单的层次上分析了神经元的结构。 这是构成更复杂神经网络的基本元素之一,例如卷积神经网络。