ข้ามไปยังเนื้อหา
1/30บทที่ 1 จาก 30

Perceptron จากศูนย์: นิวรอนคำนวณอะไร

สร้าง perceptron ด้วย Python ล้วน ดูมันพลาดกับ XOR และเข้าใจว่าทฤษฎีการลู่เข้ารับประกันความสำเร็จ แต่ไม่รับประกันว่าจะทันเห็น

ในหน้านี้

มีสายพานลำเลียงอยู่ในโรงงาน ชิ้นส่วนไหลมาตามสายพาน และต้องมีใครสักคนตัดสินใจว่าชิ้นไหนส่งออกได้ ชิ้นไหนต้องตีกลับ สำหรับทุกชิ้นส่วนมีการวัดตัวเลขสองค่า: ความกว้างเป็นมิลลิเมตร และน้ำหนักเป็นกรัม มีข้อมูลแค่นี้ทั้งหมด

วิธีอัตโนมัติที่เห็นได้ชัดคือเขียนกฎลงไปเลย ยอมรับถ้าความกว้างต่ำกว่า 22 มิลลิเมตร มันใช้ได้จนซัพพลายเออร์เปลี่ยนโลหะผสมแล้วน้ำหนักเลื่อน คุณจึงเพิ่มเงื่อนไขอีกข้อ จากนั้นค่าความคลาดเคลื่อนถูกเจรจาใหม่ คุณก็เพิ่มอีกข้อ หกเดือนต่อมา function ยาวสี่สิบบรรทัด ไม่มีใครจำได้ว่าบรรทัดที่ 19 มีไว้ทำไม และคนที่เขียนมันก็ลาออกไปแล้ว

อีกวิธีหนึ่งคือหัวข้อของคอร์สนี้ คุณไม่ได้เขียนกฎ คุณเขียน รูปทรง ของกฎ — template ที่มีช่องว่าง — แล้วให้ตัวอย่างตัดสินว่าช่องว่างเหล่านั้นควรใส่อะไร การกลับด้านแบบนี้คือหัวใจทั้งหมดของ machine learning และในบทนี้ template จะเล็กที่สุดเท่าที่ template หนึ่งจะเล็กได้: ตัวเลขสองค่าและเกณฑ์ตัดสินหนึ่งค่า

เมื่อจบบท คุณจะเขียน perceptron ด้วย Python ประมาณยี่สิบบรรทัด ได้เห็นมันสำเร็จ ได้เห็นมันล้มเหลว และเข้าใจทั้งสองอย่าง ไฟล์ที่คุณเขียนตรงนี้ไม่ใช่ของเล่นที่จะถูกทิ้งในบทหน้า: มันคือ commit แรกใน repository ที่อีกยี่สิบเก้าบทถัดไปจะจบลงเป็น agent ที่มี tool loop และ permission model

โมเดล: ผลรวมถ่วงน้ำหนักและเส้นหนึ่งเส้น

ลิงก์ไปยังส่วน: โมเดล: ผลรวมถ่วงน้ำหนักและเส้นหนึ่งเส้น

perceptron รับค่าที่วัดมา คูณแต่ละค่าด้วยตัวเลขที่มันควบคุมเอง บวกทั้งหมดเข้าด้วยกัน บวกตัวเลขอีกหนึ่งค่า แล้วดูเครื่องหมาย

เขียนค่าที่วัดจากชิ้นส่วนหนึ่งเป็นเวกเตอร์ x=(x1,x2)\mathbf{x} = (x_1, x_2) — ความกว้างและน้ำหนัก perceptron ถือเวกเตอร์น้ำหนัก w=(w1,w2)\mathbf{w} = (w_1, w_2) และ bias bb คะแนนของมันคือ

s(x)=wx+b=w1x1+w2x2+bs(\mathbf{x}) = \mathbf{w} \cdot \mathbf{x} + b = w_1 x_1 + w_2 x_2 + b

และคำตอบของมันคือเครื่องหมายของคะแนนนั้น: ยอมรับถ้า s(x)0s(\mathbf{x}) \geq 0 ไม่เช่นนั้นปฏิเสธ

นี่คือโมเดลทั้งหมด ทุกอย่างที่ perceptron จะรู้เกี่ยวกับโรงงานได้ตลอดไปอยู่ในตัวเลขสามค่า

เราควรหยุดดูเรขาคณิตของมันสักครู่ เพราะนี่คือภาพที่จะยังใช้ได้ตลอดอีกยี่สิบเก้าบท แม้เมื่อสมการเริ่มยาวเกินหนึ่งบรรทัด ชุดของจุดที่ s(x)=0s(\mathbf{x}) = 0 — จุดที่ perceptron ยังตัดสินไม่ได้พอดี — คือเส้นตรงในระนาบ ด้านหนึ่งคะแนนเป็นบวกและทุกอย่างถูกยอมรับ อีกด้านหนึ่งคะแนนเป็นลบและทุกอย่างถูกปฏิเสธ สำหรับ perceptron แล้ว การเรียนรู้หมายถึง การเลื่อนเส้นนั้น

ข้อเท็จจริงสองข้อเกี่ยวกับเส้นนั้นตามมาจากพีชคณิตโดยตรง และทั้งสองข้อสำคัญในภายหลัง:

  • w\mathbf{w} ตั้งฉากกับเส้นนั้น เวกเตอร์น้ำหนักไม่ได้วางไปตาม boundary แต่มันชี้ข้าม boundary ไปยังด้านที่ถูกยอมรับ
  • bb เลื่อนเส้นได้โดยไม่หมุนมัน ถ้าไม่มี bias เส้นจะถูกบังคับให้ผ่านจุดกำเนิด ซึ่งสำหรับโรงงานที่วัดมิลลิเมตรกับกรัมแล้วเป็นข้อจำกัดที่ไร้เหตุผล — มันจะหมายความว่าชิ้นส่วนที่กว้างศูนย์และหนักศูนย์อยู่บนรั้วพอดี

กฎการเรียนรู้ และทำไมมันไม่ต้องใช้ calculus

ลิงก์ไปยังส่วน: กฎการเรียนรู้ และทำไมมันไม่ต้องใช้ calculus

perceptron เริ่มต้นโดยไม่รู้อะไรเลย: w=(0,0)\mathbf{w} = (0, 0) และ b=0b = 0 ทุกคะแนนเป็นศูนย์ ดังนั้นมันยอมรับทุกอย่าง

ตอนนี้ให้มันดูตัวอย่างทีละตัว ติด label ชิ้นส่วนที่ถูกยอมรับเป็น y=+1y = +1 และชิ้นส่วนที่ถูกปฏิเสธเป็น y=1y = -1 สำหรับแต่ละตัวอย่าง ให้ถามคำถามเดียว: เครื่องหมายออกมาถูกไหม? วิธีเขียนคำถามนี้แบบกระชับคือเช็กว่า ys(x)y \cdot s(\mathbf{x}) เป็นบวกหรือไม่ — ถ้า label กับคะแนนมีเครื่องหมายตรงกัน ผลคูณของมันเป็นบวก และถ้าไม่ตรงกันก็เป็นลบ

ถ้าคำตอบคือใช่ ไม่ต้องเปลี่ยนอะไร ถ้าคำตอบคือไม่ ให้ขยับนิดหนึ่ง:

ww+yx,bb+y\mathbf{w} \leftarrow \mathbf{w} + y\,\mathbf{x}, \qquad b \leftarrow b + y

นี่คือ algorithm ทั้งหมด และคุ้มค่าที่จะเข้าใจว่า ทำไม นี่คือการขยับที่ถูกต้อง แทนที่จะท่องจำมัน สมมติว่าชิ้นส่วนหนึ่งควรถูกยอมรับ (y=+1y = +1) แต่คะแนนออกมาเป็นลบ การเพิ่ม x\mathbf{x} เข้าไปใน w\mathbf{w} เปลี่ยนคะแนนของชิ้นส่วนนั้นเองเป็น

(w+x)xwx=xx=x2(\mathbf{w} + \mathbf{x}) \cdot \mathbf{x} - \mathbf{w} \cdot \mathbf{x} = \mathbf{x} \cdot \mathbf{x} = \lVert \mathbf{x} \rVert^2

ซึ่งเป็นจำนวนบวก คะแนนของชิ้นส่วนที่มันเพิ่งตอบผิด สูงขึ้น ซึ่งเป็นทิศทางที่มันควรไป กฎนี้ไม่ใช่ heuristic ที่ใครสักคนเดาเอาเอง; มันคือการเปลี่ยนแปลงที่เล็กที่สุดซึ่งพิสูจน์ได้ว่าปรับปรุงกรณีตรงหน้า แน่นอนว่ามันอาจทำให้กรณีอื่นเสียได้ นั่นคือเหตุผลที่คุณต้องวนอีกรอบ

สังเกตสิ่งที่ไม่มีอยู่ ไม่มี derivative ที่ไหนเลย นี่ไม่ใช่การมองข้าม และเป็นแนวคิดสำคัญจริง ๆ ข้อแรกของคอร์สนี้

สิ่งที่คุณอยาก differentiate คือ error — จำนวนชิ้นส่วนที่ถูกจัดประเภทผิด แต่จำนวนนั้นเป็นขั้นบันได: มันราบอยู่ที่ 4 ขณะที่คุณขยับเส้น แล้วลดลงเป็น 3 ทันทีเมื่อเส้นข้ามจุดหนึ่ง derivative ของมันเป็นศูนย์แทบทุกที่ และไม่ถูกนิยามตรงขั้นบันได Calculus ไม่มีอะไรให้จับ กฎ perceptron ทำงาน อ้อม สิ่งนั้นโดยไม่ถามหา slope เลย: มันถามแค่ว่า “ถูกหรือผิด?” แล้วเคลื่อนที่ในทิศทางที่มันให้เหตุผลทางเรขาคณิตได้

นี่เป็นคำตอบจริง ๆ และก็เป็นทางตันด้วย ใน บทที่ 2 เราจะต้องการ loss ที่มีที่มามากกว่าถูกเลือกขึ้นมาเฉย ๆ ใน บทที่ 4 ต้องการโมเดลที่รายงานว่า มั่นใจแค่ไหน และใน บทที่ 5 ต้องการสิ่งที่มีมากกว่าหนึ่ง layer — และไม่มีสิ่งใดไปถึงได้จากกฎที่รู้แค่ “ผิด” การได้ slope ที่ใช้งานได้กลับมาคือสิ่งที่บังคับให้เกิดสองบทถัดไป แต่ perceptron ได้ทำสิ่งที่ผู้สืบทอดของมันทำไม่ได้เลย: เรียนรู้โดยไม่ต้องใช้ calculus แม้แต่น้อย

Python ล้วน ๆ ไม่มี NumPy มีแค่ list กับ loop NumPy จะมาในบทหน้า เมื่อคณิตศาสตร์เริ่มไม่พอดีกับ loop ที่คุณอยากอ่าน; การนำมันเข้ามาตอนนี้จะซ่อน arithmetic ไว้หลัง library ในจังหวะที่คุณอยากเห็นมันพอดี

perceptron.pyPYTHON
def score(w, b, x):
    return w[0] * x[0] + w[1] * x[1] + b


def predict(w, b, x):
    return 1 if score(w, b, x) >= 0 else -1


def train(data, epochs=200):
    """Returns (w, b, epoch_it_converged) — or None for the epoch if it never did."""
    w, b = [0.0, 0.0], 0.0
    for epoch in range(epochs):
        mistakes = 0
        for x, y in data:
            if y * score(w, b, x) <= 0:          
                w[0] += y * x[0]                 
                w[1] += y * x[1]                 
                b += y                           
                mistakes += 1
        if mistakes == 0:
            return w, b, epoch + 1
    return w, b, None

สี่บรรทัดที่ไฮไลต์คือ algorithm นอกนั้นทั้งหมดเป็นงาน bookkeeping

และนี่คือสายพาน พร้อมชิ้นส่วนแปดชิ้นที่วัดจากมัน — สี่ชิ้นที่ส่งออก และสี่ชิ้นที่ถูกตีกลับ:

belt.pyPYTHON
BELT = [
    ((18.0, 47.0), +1), ((19.5, 52.0), +1), ((20.2, 49.0), +1), ((21.0, 55.0), +1),
    ((24.0, 61.0), -1), ((25.5, 66.0), -1), ((23.0, 70.0), -1), ((26.0, 58.0), -1),
]

w, b, epoch = train(BELT, epochs=200)
print(epoch, w, b)

ชิ้นส่วนทั้งแปดนี้ แยกได้ ด้วยเส้นตรง — ทุกชิ้นที่ยอมรับกว้างต่ำกว่า 22 มม. และทุกชิ้นที่ปฏิเสธกว้าง 23 มม. ขึ้นไป รั้วแนวตั้งที่ 22 มิลลิเมตรก็ทำงานได้ ดังนั้น perceptron ควรหาเจอ

รันมัน:

TEXT
None [-142.1, -13.0] 54.0

สองร้อย epoch, การแก้ไข 454 ครั้ง และมันยังไม่ converged น้ำหนักมีค่ามากและเครื่องหมายผิด มีบางอย่างผิด — ยกเว้นว่าไม่มีอะไรผิดเลย และเหตุผลนั้นคือสิ่งที่มีประโยชน์ที่สุดในบทนี้

ทฤษฎีการลู่เข้า และตัวเลขที่มันให้คุณจริง ๆ

ลิงก์ไปยังส่วน: ทฤษฎีการลู่เข้า และตัวเลขที่มันให้คุณจริง ๆ

perceptron มีการรับประกัน ซึ่งพิสูจน์โดย Novikoff ในปี 19621 ถ้าข้อมูลสามารถถูกแยกด้วยเส้นได้เลย algorithm จะทำการแก้ไขไม่เกิน

(Rγ)2\left(\frac{R}{\gamma}\right)^2

ครั้งก่อนที่มันจะหยุดแก้ — โดย RR คือ radius ของข้อมูล ความยาวของเวกเตอร์ตัวอย่างที่ยาวที่สุด และ γ\gamma คือ margin: ระยะจาก hyperplane ที่ใช้แยกไปยังจุดที่ใกล้ที่สุด ใน augmented space ที่ bias เป็นพิกัดที่สาม นั่นคือเหตุผลที่การทำ centering ข้อมูลเปลี่ยนมันได้ แม้ระยะในหน่วยมิลลิเมตรจะไม่เปลี่ยน

การรับประกันนี้ไม่มีเงื่อนไข และไม่ได้พูดถึง epoch, learning rate หรือโชค มันก็ไม่ได้พูดถึง เวลา เช่นกัน และการละเว้นตรงนั้นคือประเด็น

ใส่ตัวเลขของเราเข้าไป วัดโดยตรงจากชิ้นส่วนทั้งแปด โดยพับ bias เข้าไปเป็น feature คงที่:

radius RRmargin γ\gammabound (R/γ)2(R/\gamma)^2จำนวนการแก้ไขที่เกิดขึ้นจริง
มิลลิเมตรและกรัมดิบ73.690.0452,633,55029,870
หลังลบค่าเฉลี่ย12.820.9891681

ทฤษฎีไม่เคยถูกละเมิด รันเวอร์ชันดิบให้นานพอแล้วมันก็ converge จริง — ที่ epoch 11,976 หลังการแก้ไข 29,870 ครั้ง — อยู่ใน bound 2,633,550 อย่างสบาย และช่องว่างนั้นเองคือประเด็น: ทฤษฎีให้ bound ของกรณีเลวร้ายที่สุด ไม่ใช่กรณีทั่วไป มันแค่ต้องใช้ epoch มากกว่าที่ใครจะนั่งรอถึงหกสิบเท่า

แถวที่สองคือชิ้นส่วนแปดชิ้นเดิม โค้ดยี่สิบบรรทัดเดิม โดยเพิ่มสามบรรทัดเพื่อลบค่าเฉลี่ยความกว้างและค่าเฉลี่ยน้ำหนักออกจากทุกการวัด แค่นั้น นั่นคือการเปลี่ยนแปลงทั้งหมด มันย้ายกลุ่มจุดให้คร่อมจุดกำเนิด แทนที่จะลอยอยู่ที่ (22, 57) และผลต่อ bound คือ หนึ่งหมื่นห้าพันเท่า เพราะทั้งสองพจน์ดีขึ้นพร้อมกัน: RR ลดจาก 74 เป็น 13 เพราะจุดต่าง ๆ ไม่ได้ถูกวัดจากจุดกำเนิดที่ไกลออกไปอีกแล้ว และ γ\gamma เพิ่มจาก 0.045 เป็น 0.989 เพราะ margin ถูกวัดเทียบกับเวกเตอร์น้ำหนักที่ไม่ต้องแบก bias ขนาดใหญ่เพื่อเอื้อมถึงข้อมูลอีกต่อไป

belt.py (centred)PYTHON
mean_w = sum(x[0] for x, _ in BELT) / len(BELT)   # 22.15
mean_g = sum(x[1] for x, _ in BELT) / len(BELT)   # 57.25
CENTRED = [(((x[0] - mean_w), (x[1] - mean_g)), y) for x, y in BELT]

w, b, epoch = train(CENTRED, epochs=200)
print(epoch, w, b)
TEXT
2 [-4.15, -10.25] 1.0

Converged ในสอง epoch หลังจากแก้ตัวเองไปพอดี หนึ่งครั้ง

บทเรียนจริง ๆ ตรงนี้ไม่ใช่ “อย่าลืม normalise input” แม้คุณควรทำก็ตาม แต่มันคือ การรับประกันว่า algorithm จะจบหรือไม่ ไม่ได้บอกอะไรเลยว่าคุณจะยังอยู่ตอนที่มันจบไหม และช่องว่างระหว่างสองสิ่งนี้มักเป็นเรื่องของเรขาคณิต นี่คือครั้งแรกของ pattern ที่คุณจะเจออีกใน บทที่ 6 กับ initialisation, ใน บทที่ 10 กับ learning-rate schedules และใน บทที่ 13 กับ quantisation: คณิตศาสตร์บอกว่าสิ่งนั้นเป็นไปได้ ส่วนวิศวกรรมตัดสินว่ามันทำได้จริงไหม คอร์สที่สอนคุณแค่ทฤษฎีจะส่งโมเดลที่ train สามวันมาให้ แล้วโทษคุณ

ตอนนี้คือความล้มเหลวที่จบยุคแรกของ neural networks และมันใส่ได้ในสี่แถว

ลืมโรงงานไปก่อน ใช้ input สองตัวที่แต่ละตัวเป็นได้แค่ 0 หรือ 1 และขอให้คำตอบเป็น +1+1 เมื่อมีเพียงตัวใดตัวหนึ่งเท่านั้นที่เป็น 1:

x1x_1x2x_2yy
001-1
01+1+1
10+1+1
111-1

นี่คือ XOR — exclusive or ก่อนอ่านต่อ ลองวาดจุดทั้งสี่บนกระดาษ: มุมสามมุมของสี่เหลี่ยมจัตุรัสหนึ่งหน่วย และมุมที่สี่ ทำเครื่องหมายมุมทแยง (0,1)(0,1) และ (1,0)(1,0) เป็นยอมรับ และ (0,0)(0,0) กับ (1,1)(1,1) เป็นปฏิเสธ ตอนนี้ลองวาด เส้นตรงหนึ่งเส้น ให้จุดที่ยอมรับสองจุดอยู่ด้านหนึ่ง และจุดที่ปฏิเสธสองจุดอยู่อีกด้านหนึ่ง

คุณทำไม่ได้ ไม่ใช่ว่ามันยาก หรือคุณต้องการ algorithm ที่ฉลาดกว่านี้; แต่เพราะเส้นนั้นไม่มีอยู่ พีชคณิตสามบรรทัดแสดงให้เห็นว่าทำไม ถ้า perceptron ทำทั้งสี่แถวถูก เมื่ออ่านสี่แถวตามลำดับจะได้

b<0,w2+b0,w1+b0,w1+w2+b<0b < 0, \qquad w_2 + b \geq 0, \qquad w_1 + b \geq 0, \qquad w_1 + w_2 + b < 0

บวกอสมการกลางสองอัน: w1+w2+2b0w_1 + w_2 + 2b \geq 0 ดังนั้น w1+w22bw_1 + w_2 \geq -2b อันสุดท้ายบอกว่า w1+w2<bw_1 + w_2 < -b รวมกันได้: 2bw1+w2<b-2b \leq w_1 + w_2 < -b ซึ่งต้องการ 2b<b-2b < -b ซึ่งต้องการ b>0b > 0 และอสมการแรกบอกว่า b<0b < 0 ไม่มี bb แบบนั้น ดังนั้นจึงไม่มีน้ำหนักแบบนั้น ไม่มี perceptron ตัวใด ไม่ว่าตัวเลขใด ๆ ก็ตาม ที่ classify XOR ได้

รันมันอยู่ดี เพราะการดู algorithm ล้มเหลวมีค่ามากกว่าการถูกบอกว่ามันจะล้มเหลว:

TEXT
     100 epochs -> converged=None  w=[0.0, 0.0] b=0.0  correct=2/4
   1,000 epochs -> converged=None  w=[0.0, 0.0] b=0.0  correct=2/4
 100,000 epochs -> converged=None  w=[0.0, 0.0] b=0.0  correct=2/4

มันไม่ diverge และมันไม่ได้แกว่งไปมาใกล้คำตอบที่พอใช้ได้ มัน วนรอบ: มันเดินเป็น loop สั้น ๆ ผ่าน weight space แล้วกลับมาที่จุดเริ่มต้นเดิมเป๊ะ ตลอดไป ทำถูกสองจากสี่ — ซึ่งก็คือสิ่งที่คุณจะได้จากการเดา epoch หนึ่งแสนกับหนึ่งร้อยแยกกันไม่ออก เพราะ algorithm ไม่ได้กำลังก้าวหน้าชนิดที่การรันนานขึ้นจะทำให้เสร็จได้ เทียบกับสายพานซึ่งดูติดอยู่ที่ 200 epoch แต่จริง ๆ กำลังบดไปหาคำตอบจริง จากภายนอก สองกรณีนี้ดูคล้ายกันในไม่กี่วินาทีแรก การแยกมันออกจากกันโดยไม่มีทฤษฎีเป็นไปไม่ได้ — และนั่นคืออีกเหตุผลหนึ่งที่ควรรู้ทฤษฎี

ในปี 1969 Marvin Minsky และ Seymour Papert ตีพิมพ์ Perceptrons งานศึกษาทางคณิตศาสตร์ขนาดหนังสือเกี่ยวกับสิ่งที่โมเดลนี้แทนค่าได้และแทนค่าไม่ได้อย่างแม่นยำ2 XOR คือผลลัพธ์ที่ถูกอ้างบ่อยที่สุด และคำอ้างนั้นมักถูกใช้เป็นข้อกล่าวหา: ว่าหนังสือเล่มนี้ฆ่างานวิจัย neural network ไปสิบห้าปีเพราะการแข่งขันหรือความอาฆาต

คณิตศาสตร์ในหนังสือถูกต้อง และน่าสนใจกว่าตัวอย่าง XOR มาก Minsky และ Papert ไม่ได้สนใจหลัก ๆ ว่า perceptron เดี่ยวทำ XOR ได้ไหม; พวกเขาสนใจว่าจะเกิดอะไรขึ้นเมื่อ perceptron มี limited receptive fields — แต่ละ unit เห็น input เพียงบางส่วน — และพวกเขาพิสูจน์ว่า property ระดับ global บางอย่างของภาพ เช่น รูปหนึ่งเชื่อมต่อกันหรือไม่ ไม่สามารถคำนวณด้วยวิธีนั้นได้ ไม่ว่าคุณจะใช้ unit กี่ตัวก็ตาม นั่นคือผลลัพธ์ที่ลึกจริง ๆ เกี่ยวกับ locality และไม่มีอะไรเกี่ยวกับเรื่องเล่ายอดนิยม

เรื่องเล่ายอดนิยมยังผิดในทางประวัติศาสตร์ด้วย Minsky และ Papert พูดถึง multi-layer perceptrons อย่างชัดเจน และบอกว่าคำถามเรื่องพลังของมันยังเปิดอยู่ — พวกเขาสงสัยว่าการขยายทฤษฎีจะ “ไร้ผล” ซึ่งเป็นการคาดการณ์ ไม่ใช่การพิสูจน์ และมันผิด สิ่งที่ขาดไปในปี 1969 ไม่ใช่ไอเดียของการซ้อน layer; แต่เป็นวิธี train stack หนึ่ง กฎ perceptron ทำไม่ได้: มันต้องรู้ว่าแต่ละ unit ผิดแค่ไหน และสำหรับ unit ที่ถูกฝังอยู่ตรงกลาง ไม่มี label ให้เทียบ ช่องว่างนั้นเปิดค้างอยู่จนกระทั่ง backpropagation ถูกทำให้แพร่หลายในปี 19863 และการปิดช่องว่างนี้คือสิ่งที่บทที่ 5 ทำ

ดังนั้นสรุปอย่างซื่อสัตย์คือแบบนี้ หนังสือพิสูจน์ข้อจำกัดจริงของโมเดลจริง การล่มสลายของเงินทุนในสาขานี้ช่วงทศวรรษ 1970 มีหลายสาเหตุ หนึ่งในนั้นคือคำสัญญาที่ให้ไว้กับ perceptron ช่วงต้นทศวรรษ 1960 นั้นเกินจริง และอุปสรรคทางเทคนิคแก้ได้ แต่ยังไม่มีใครมีเครื่องมือนั้น

perceptron มีอายุหกสิบแปดปี และคุณเพิ่งเขียนมันขึ้นมาตัวหนึ่ง คุ้มค่าที่จะพูดให้แม่นว่าส่วนไหนของมันยังอยู่ในเครื่องที่คุณจะสร้างเสร็จเมื่อจบคอร์สนี้ เพราะคำตอบคือ: มากกว่าที่คุณเดา

ยังอยู่ตรงนี้ รูปทรง — คูณด้วยน้ำหนัก บวกผลรวม เพิ่ม bias ใช้ nonlinear function กับผลลัพธ์ — คือรูปทรงเดียวกันเป๊ะของ unit หนึ่งในทุก neural network ของคอร์สนี้ รวมถึงที่อยู่ใน transformer block ในบทที่ 9 กฎ update-on-mistake คือ stochastic gradient descent ที่ปลอมตัวมา: มันคือสิ่งที่คุณได้พอดีเมื่อใช้วิธีของ บทที่ 3 กับ loss function เฉพาะแบบหนึ่ง การ train แบบค่อยเป็นค่อยไป — ทีละตัวอย่างไม่กี่ตัว แทนที่จะใช้ dataset ทั้งหมดในครั้งเดียว — ยังคงเป็นวิธีที่โมเดลถูก train วันนี้ในทุก scale บทที่ 3 จะวัดว่า trade-off นั้นอยู่ตรงไหนจริง ๆ

หายไปแล้ว threshold เอง: ถูกแทนในบทที่ 4 ด้วย function ที่ output เป็นความน่าจะเป็นแทนคำตัดสิน เพราะ “ปฏิเสธ” กับ “ปฏิเสธ แต่เฉียดมาก” เป็นข้อมูลคนละชิ้น และเครื่องหมายโยนความต่างนั้นทิ้งไป layer เดี่ยว ถูกแทนในบทที่ 5 และ feature ที่เลือกด้วยมือ: มีใครสักคนเลือก ความกว้าง กับ น้ำหนัก ให้สายพานนี้ และการเลือกนั้นทำงานหนักกว่า algorithm เสียอีก บทที่ 8 คือจุดที่โมเดลเริ่มเลือกของมันเอง

perceptron ติดอยู่กับสองสิ่งพร้อมกัน และสุดท้ายมันกลายเป็นสิ่งเดียวกัน

มันแทน XOR ไม่ได้ เพราะเส้นหนึ่งเส้นไม่พอ การแก้สิ่งนั้นหมายถึงการซ้อน layer — layer แรกที่ดัด space, layer ที่สองที่วาดเส้นใน space ที่ถูกดัดแล้ว นั่นคือบทที่ 5

แต่คุณ train stack ด้วยกฎ perceptron ไม่ได้ เพราะมันรู้แค่ “ผิด” และ unit ที่อยู่กลาง network ไม่มี label ของตัวเองให้ผิดเกี่ยวกับมัน การ train stack ต้องรู้ว่า ผิดอย่างไร และผิดในทิศทางไหน สำหรับทุกน้ำหนัก — คุณต้องการ slope และ error function ของ perceptron ซึ่งเป็นขั้นบันได ไม่มีสิ่งนั้น

ดังนั้นก่อน stack ต้องมี loss function ที่มี derivative ใช้งานได้ และไม่ใช่สิ่งที่เลือกมาเพราะ differentiate สะดวกด้วย: แต่เป็นสิ่งที่มีที่มา บอกความจริงบางอย่างเกี่ยวกับข้อมูล และ gradient ของมันไหลออกมาจากความหมายนั้น แทนที่จะถูก reverse-engineered ให้ดูเรียบร้อย

นั่นคือบทที่ 2 และมันเริ่มจากการถามคำถามที่ perceptron ไม่เคยต้องตอบ: ไม่ใช่ “ชิ้นส่วนนี้ดีไหม?” แต่เป็น “ค่าที่อ่านเหล่านี้ น่าจะเป็นไปได้แค่ไหน ถ้านี่คือความจริง?”


สิ่งที่ควรอ่านควบคู่กับบทนี้ด้วย: บทความดั้งเดิมของ Rosenblatt, The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain (Psychological Review 65(6), 1958) ซึ่งอ่านง่ายกว่าชื่อเสียงของมันชวนให้คิด; McCulloch and Pitts, A Logical Calculus of the Ideas Immanent in Nervous Activity (Bulletin of Mathematical Biophysics 5, 1943) บทความที่ model นิวรอนเป็น threshold เหนือผลรวมถ่วงน้ำหนักเป็นครั้งแรก; ส่วน perceptron ใน A Course in Machine Learning ของ Hal Daumé III ซึ่ง derive update เดียวกันด้วยน้ำหนักเน้นที่ต่างออกไป; และบทที่ 2 กับ 3 ของ Mathematics for Machine Learning โดย Deisenroth, Faisal และ Ong สำหรับ linear algebra หากกล่องด้านบนทำให้คุณอยากได้มากกว่าที่มันให้ไว้

  1. Novikoff, A. B. J. On convergence proofs for perceptrons. Proceedings of the Symposium on the Mathematical Theory of Automata, vol. 12, pp. 615–622 (Polytechnic Institute of Brooklyn, 1962). แถลงการณ์และการพิสูจน์ดั้งเดิมของ mistake bound ที่ใช้ข้างต้น

  2. Minsky, M. and Papert, S. Perceptrons: An Introduction to Computational Geometry (MIT Press, 1969; expanded edition 1988). ผลลัพธ์ XOR เป็นเรื่องพื้นฐาน; ผลลัพธ์ที่มีสาระสำคัญเกี่ยวกับ order-limited predicates และ connectedness

  3. Rumelhart, D. E., Hinton, G. E. and Williams, R. J. Learning representations by back-propagating errors. Nature 323, pp. 533–536 (1986).


สร้างโดย

David Vicente Campos

ผู้ก่อตั้ง NeuraLIA Labs และผู้ร่วมก่อตั้ง MyRealFood

ผมเป็นวิศวกรคอมพิวเตอร์ที่จบจากมหาวิทยาลัยเลออน ผมร่วมก่อตั้ง MyRealFood ที่ที่ผมในฐานะ CTO ได้สร้างแอปซึ่งผู้คนหลายล้านคนใช้เพื่อกินให้ดีขึ้น และผมก่อตั้ง NeuraLIA Labs ที่ที่ผมสร้างผลิตภัณฑ์ AI ที่นี่ผมเขียนถึงสิ่งที่ผมต้องทำความเข้าใจระหว่างทาง ในแบบที่ผมเคยหวังว่าจะมีใครสักคนอธิบายให้ผมฟัง

เพิ่มเติมเกี่ยวกับผู้เขียน

เผยแพร่โดย NeuraLIA Labs

รับโพสต์ใหม่ในกล่องจดหมาย

ข่าว AI คู่มือ และอัปเดตผลิตภัณฑ์ — อีเมลสั้น ๆ เมื่อเรามีสิ่งที่คุ้มเวลาของคุณ

ชอบแบบข้อความมากกว่าไหม รับเนื้อหาเดียวกันได้ที่นี่:คอมมูนิตี้ WhatsApp (เปิดในแท็บใหม่)ช่อง Telegram (เปิดในแท็บใหม่)

ดัชนีคอร์ส

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jevอ่าน 5 นาที

โมเดล AI Jev สร้างมาเพื่อการตัดสินใจ ไม่ใช่การเขียนความเรียง

Jev ของ TypeSafe AI กำลังได้รับความสนใจ เพราะมองความฉลาดของซอฟต์แวร์เป็นปัญหาความน่าจะเป็น: เลือกกิ่งที่ถูกต้อง แนบความมั่นใจ และหลีกเลี่ยงการจ่ายเงินให้ LLM เขียนข้อความเมื่อโค้ดต้องการการตัดสินใจ

Abstract legal research workspace with documents, search nodes and governance controls.
openaiอ่าน 4 นาที

Astra for Law ของ OpenAI คือระบบ AI ด้านกฎหมาย ไม่ใช่โมเดลใหม่

การเปิดตัวด้านกฎหมายของ OpenAI ไม่ได้เน้นโมเดลฐานรากใหม่เท่ากับระบบที่ล้อมรอบโมเดลนั้น: การค้นคืนเฉพาะโดเมน เครื่องมือที่เชื่อถือได้ สิทธิ์ เบนช์มาร์ก และเส้นทางการตรวจทาน

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineeringอ่าน 4 นาที

วิศวกรรมบริบทสำหรับเอเจนต์ AI ที่ทำงานระยะยาว

เอเจนต์ที่ทำงานต่อเนื่องไม่ได้ล้มเหลวเพียงเพราะหน้าต่างบริบทเล็กเกินไป แต่ล้มเหลวเมื่อไฟล์ ผลลัพธ์จากเครื่องมือ และประวัติที่ค้างเก่าบดบังงานที่เอเจนต์ควรทำให้เสร็จ

พร้อมให้ LIA เลือกโมเดลให้แล้วหรือยัง?

สร้างงานด้วยโมเดล AI ทุกตัวในที่เดียว เริ่มฟรีวันนี้