Perceptron нь 1957 онд Америкийн судлаач Розен Блаттын загварчилсан Neural Network-ийн 起源 (үндэс, эх болсон) алгоритм нь юм.

Perceptron#

Perceptron гэдэг нь товчоор олон оролт (0, 1 гэсэн төлөвтэй) хүлээн авч, ганц утга болгож гаргадаг бүтэц. Оролтын утга 1, 0 орох үед тухайн Node бүрт буй weight гэдэг параметраар дамжин гаралтын ганц утгыг гаргадаг.

perceptron_example

Дээрх зурагт 2 оролттой Perceptron-ны жишээг харуулсан байна. x1x_1, x2x_2 нь оролтын утга, yy нь гаралтын утга, w1w_1, w2w_2 нь weight-г илэрхийлнэ. Зураг дахь ○ нь нейрон гэж дуудагдана. Оролтууд нейронд илгээгдсэн даруйд тэдгээр нь өөрсдийн хувийн weight-ээрээ үржигдэнэ (w1x1w_1x_1w2x2w_2x_2). Эдгээрийн нийлбэрийг бодон, энэ нийлбэр нь хязгаарлалтын утгыг давж буй үед 1-ийг гаргана. Үүнийг нейрон идэвхжих гэнэ. Харин эсрэг тохиолдолд 0-ийг гаргана. Хязгаарлалтын утгыг Threshold гэж дуудан θθ үсгээр тэмдэглэдэг.

Perceptron-ны ажиллах зарчим нь ердөө энэ! Дээрх үйлдлүүдийг тэгшитгэлээр илэрхийлвэл:

y={0(w1x1+w2x2θ)1(w1x1+w2x2>θ)(1)y = \begin{cases} 0 & (w_1 x_1 + w_2 x_2 \leq \theta) \\ 1 & (w_1 x_1 + w_2 x_2 > \theta) \end{cases} \tag{1}

Perceptron нь олон тооны оролт, тэдгээрт оноогдсон weight-уудыг агуулдаг. Weight нь оролт тус бүрийн чухал байдлыг тодорхойлох элементийн хувьд ашиглагдаж байдаг. Товчоор, тухайн оролтын weight нь их байх тусам тухайн оролт чухал болдог.

Weight нь цахилгаан хэлхээний эсэргүүцэл шиг зүйл. Гэхдээ урвуу хамааралтай. Эсэргүүцэл бага байх тусам их гүйдэл гүйдэг бол weight нь их байх тусам цааш утга дамжуулах магадлал өндөртэй болно гэсэн үг. Эсэргүүцэл ч, weight ч тухайн дохионы урсан өнгөрөхөд хүндрэлтэй/хялбар эсэхийг удирддаг гэдгээрээ ижил талтай гэсэн үг.

Энгийн логик хэлхээ#

Perceptron ашиглан жишээ болгож энгийн логик хэлхээнүүдийг үүсгэе.

AND gate#

AND gate нь 2 оролт 1 гаралттай, 真理値表 (үнэний хүснэгт) нь

AND gate үнэний хүснэгт

Perceptron ашиглана гэдэг нь w1w2θw1、w2、θ зэрэг утгуудыг тохируулж өгөх тухай. (w1,w2,θ)=(0.5,0.5,0.7)(w1, w2, θ) = (0.5, 0.5, 0.7) эсвэл (0.5,0.5,0.8)(0.5, 0.5, 0.8), (1.0,1.0,1.0)(1.0, 1.0, 1.0) аль ч бай тэгшитгэл (1)-ээр бодвол AND gate шиг ажиллана.

NAND, OR gate#

NAND = Not AND гэхлээр үнэний хүснэгт нь AND gate-ийн урвуу гэсэн үг. NAND gate үнэний хүснэгт AND gate үүсгэхэд ашигласан утгуудын тэмдэгүүдийг солих төдийд (w1,w2,θ)=(0.5,0.5,0.7)(w1, w2, θ) = (−0.5, −0.5, −0.7) NAND gate үүснэ.

OR gate үнэний хүснэгт Threshold нь бага (w1,w2,θ)=(0.5,0.5,0.4)(w1, w2, θ) = (0.5, 0.5, 0.4) байвал мөн л OR gate-ийг үүсгэнэ.

Үнэний хүснэгтийг нь харж байгаад эдгээр гурван утгыг тохируулахад л өөр өөр логик gate үүсгэж болно.

Код бичих#

Python-оор логик хэлхээнүүдийг бичвэл

def AND(x1, x2):
	w1, w2, theta = 0.5, 0.5, 0.7
	t = x1*w + x2*w2
	if t <= theta:
		return 0
	elif t > theta:
		return 1

Үүнтэй адилаар NAND, OR gate-үүдийг бичиж болох ч тэгшитгэл (1)-ийн θ\thetab-b болгон орлуулж тэгшитгэлийг хувиргая.

y={0(b+w1x1+w2x20)1(b+w1x1+w2x2>0)(2)y = \begin{cases} 0 & (b + w_1 x_1 + w_2 x_2 \leq 0) \\ 1 & (b + w_1 x_1 + w_2 x_2 > 0) \end{cases} \tag{2}

θb\theta \rightarrow -b болгон хувиргасны ач холбогдол:

  • Стандартчлал: Бүх параметрүүдийг (ww ба bb) нэг ижил нэмэх үйлдлээр илэрхийлж, тооцооллыг хялбаршуулна.
  • Уян хатан байдал: Матрицын үржвэр (WX+BW \cdot X + B) ашиглахад тохиромжтой болно.
  • Сургалтын хялбар байдал: Bias нь "сургалтын явцад өөрчлөгддөг weight-ийн нэг төрөл" (input-гүй 1-тэй үржигддэг weight) болж, Gradient Descent аргаар сургахад бэлэн болдог.

Миний ажигласанаар хамгийн чухал нь "Оролт 0 байсан ч гаралт 0-ээс ялгаатай байх боломжийг олгоно" гэдэг ойлголт. Хэрэв оролтууд нь 0 байвал (x1=0,x2=0x_1=0, x_2=0): b+(w1×0)+(w2×0)=bb + (w_1 \times 0) + (w_2 \times 0) = b болж зөвхөн bb утга гарч ирнэ. Ингэснээр нейрон сүлжээнд оролт 0 байсан ч гаралт нь 0-ээс ялгаатай тодорхой түвшинд байх боломжийг bias олгодог.

Мөн утгын хувьд тусдаа Threshold параметр биш болж weight-тэй адил энгийн тохируулж болохуйц болсон ч нөлөөлөл нь weight-ээс өөр.

Энэ оролт хэр нөлөөтэй вэ? гэдгийг weight-үүд тодорхойлдог бол bias нь энэ нейрон идэвхжих амар уу? хялбар уу?эсэхийг шийддэг.

def AND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([0.5, 0.5])
	b = -0.7
	tmp = np.sum(w*x) + b
	if tmp <= 0:
		return 0
	else:
		return 1
def NAND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([-0.5, -0.5])
	b = 0.7
	tmp = np.sum(w*x) + b
	if tmp <= 0:
		return 0
	else:
		return 1
def OR(x1, x2):
	x = np.array([x1, x2])
	w = np.array([0.5, 0.5])
	b = -0.4
	tmp = np.sum(w*x) + b
	if tmp <= 0:
		return 0
	else:
		return 1

Үүнээс харвал нэг л бүтэц бүхий perceptron гэдэг алгоритм w,bw, b гэх параметруудыг тохируулж өгөх төдийд л өөр өөр logic gate-үүдийг үүсгэж болж байна.

Perceptron-ний хязгаар#

XOR буюу exculusive OR gate-г perceptron өөр үүсгэж чадахгүй. Учир нь тэгшитгэл(2) нь шулууны тэгшитгэл бөгөөд XOR gate-ийн үнэний хүснэгтийг хангах шулууныг координатын хавтгайд зурах боломжгүй. Шугаман бус, муруй зурж байж үүнийг хангах боломжтой болно. XOR график

Олон давхар perceptron#

XOR үнэний хүснэгт

Дээр үзүүлсэнчлэн NAND, OR, AND gate-үүдийг давхарлан XOR gate бүтээх боломжтой.

def XOR(x1, x2):
	s1 = NAND(x1, x2)
	s2 = OR(x1, x2)
	y = AND(s1, s2)
	return y

Perceptron-ны өөр нэгэн чухал чанар бол давхарлах боломжтой байдал ба давхарласнаар шугаман бус муруй байсан ч хамаагүй илэрхийлж болохоор болдог нь юм.