การเรียนรู้ของเครื่องสามารถเรียนรู้ฟังก์ชั่นเช่นการหาค่าสูงสุดจากรายการได้หรือไม่?


26

ฉันมีอินพุตซึ่งเป็นรายการและเอาต์พุตคือองค์ประกอบสูงสุดของอินพุต - รายการ

การเรียนรู้ของเครื่องสามารถเรียนรู้ฟังก์ชันที่เลือกค่าสูงสุดขององค์ประกอบอินพุตที่มีอยู่ในอินพุตได้หรือไม่?

นี่อาจดูเหมือนเป็นคำถามพื้นฐานที่สวย แต่อาจทำให้ฉันเข้าใจในสิ่งที่การเรียนรู้ของเครื่องสามารถทำได้โดยทั่วไป ขอบคุณ!


1
ฉันคิดว่าคุณสามารถลองสิ่งนี้เป็นปัญหาอนุกรมเช่นใช้ Recurrent Neural Network ฟีดข้อมูลที่เรียงลำดับไปยังเครือข่าย
vipin bansal

2
ดูเพิ่มเติมdatascience.stackexchange.com/q/22242 , datascience.stackexchange.com/q/29345 ; โครงข่ายประสาทเทียมสามารถเรียงลำดับรายการอินพุตดังนั้นแน่นอนสามารถแยกได้สูงสุด
Ben Reiniger

3
@TravisBlack: จริง ๆ แล้วนี่เป็นประเภทของฟังก์ชั่นที่คุณไม่สามารถเรียนรู้ได้ด้วยเครือข่ายประสาทมาตรฐาน ตัวอย่างเช่นสมมติว่าคุณเพียงแค่เสียบเวกเตอร์ที่มีค่าเพื่อทำนายว่ามีค่ามากกว่าค่าใด ๆ ที่คุณมีในชุดฝึกอบรมของคุณ คุณคิดว่าโครงข่ายประสาทเทียมที่ได้รับการฝึกฝนแล้วจะให้คุณค่าที่มากที่สุดกลับคืนมา?
หน้าผา AB

10
@TravisBlack NOOO! โครงข่ายใยประสาทเทียมไม่สามารถเรียนรู้ฟังก์ชันทางคณิตศาสตร์ใด ๆ Cardinality-wise ฟังก์ชั่นเกือบทั้งหมดเป็นพยาธิสภาพที่ไม่ต่อเนื่องเกือบทุกที่ สิ่งที่คุณอาจหมายถึงเป็นจำนวนมากของฟังก์ชั่นที่นักคณิตศาสตร์ที่เป็นจริงมีความสนใจในการเกิดขึ้นจะมีความประพฤติดีพอที่จะทำให้เครือข่ายประสาทสามารถใกล้เคียงกับพวกเขาโดยพลการได้ดี แต่นั่นไม่ได้ทั้งหมดเป็นสิ่งเดียวกับความสามารถในการเรียนรู้ฟังก์ชั่นใด
leftaroundabout

6
@leftaroundabout และ Cliff: มันเป็นเรื่องดีที่จะเห็นว่ามีคนอยู่บนพื้นในโฆษณา ML / DL ที่ผ่านมา ผู้คนกำลังใช้ NNs และเมื่อคุณขุดลึกลงไปหนึ่งระดับคุณจะสังเกตเห็นว่าพวกเขามักจะไม่มีความคิดเพียงเล็กน้อยว่าพวกเขากำลังทำอะไรอยู่ที่นั่น - นอกเหนือจากการปรับแต่งตัวแปรสุ่มสี่สุ่มห้าจากตัวอย่าง "Hello World" ของ keras xkcd ได้รับนี้ตรงขวา: xkcd.com/1838 ฉันหวังว่าบางคนยังสามารถเพิ่มคำตอบได้ที่นี่ซึ่งลึกซึ้งยิ่งกว่าคำตอบปัจจุบัน (ไม่มีความผิดต่อใครเลย แต่การขาดความเข้าใจทั่วไปของ
NNs

คำตอบ:


35

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

เพียงเพราะคุณทำได้ไม่ได้หมายความว่าคุณควรทำ

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

import numpy as np
from keras.models import Model
from keras.layers import Input, Dense, Dropout
from keras.utils import to_categorical
from sklearn.model_selection import train_test_split
from keras.callbacks import EarlyStopping

# Create an input array of 50,000 samples of 20 random numbers each
x = np.random.randint(0, 100, size=(50000, 20))

# And a one-hot encoded target denoting the index of the maximum of the inputs
y = to_categorical(np.argmax(x, axis=1), num_classes=20)

# Split into training and testing datasets
x_train, x_test, y_train, y_test = train_test_split(x, y)

# Build a network, probaly needlessly complicated since it needs a lot of dropout to
# perform even reasonably well.

i = Input(shape=(20, ))
a = Dense(1024, activation='relu')(i)
b = Dense(512, activation='relu')(a)
ba = Dropout(0.3)(b)
c = Dense(256, activation='relu')(ba)
d = Dense(128, activation='relu')(c)
o = Dense(20, activation='softmax')(d)

model = Model(inputs=i, outputs=o)

es = EarlyStopping(monitor='val_loss', patience=3)

model.compile(optimizer='adam', loss='categorical_crossentropy')

model.fit(x_train, y_train, epochs=15, batch_size=8, validation_data=[x_test, y_test], callbacks=[es])

print(np.where(np.argmax(model.predict(x_test), axis=1) == np.argmax(y_test, axis=1), 1, 0).mean())

ผลลัพธ์คือ 0.74576 ดังนั้นการค้นหาสูงสุดอย่างถูกต้อง 74.5% ของเวลา ฉันไม่สงสัยเลยว่ามันจะดีขึ้น แต่เมื่อฉันบอกว่านี่ไม่ใช่ usecase ฉันอยากจะแนะนำสำหรับ ML

แก้ไข 2 : จริง ๆ แล้วฉันวิ่งอีกครั้งในเช้านี้โดยใช้ RandomForestClassifier แบบสุ่มของ sklearn และมันทำงานได้ดีกว่ามาก

# instantiation of the arrays is identical

rfc = RandomForestClassifier(n_estimators=1000, verbose=1)
rfc.fit(x_train, y_train)

yhat_proba = rfc.predict_proba(x_test)


# We have some annoying transformations to do because this .predict_proba() call returns the data in a weird format of shape (20, 12500, 2).

for i in range(len(yhat_proba)):
    yhat_proba[i] = yhat_proba[i][:, 1]

pyhat = np.reshape(np.ravel(yhat_proba), (12500,20), order='F')

print(np.where(np.argmax(pyhat, axis=1) == np.argmax(y_test, axis=1), 1, 0).mean())

และคะแนนที่นี่คือ 94.4% ของตัวอย่างที่มีการระบุค่าสูงสุดอย่างถูกต้องซึ่งค่อนข้างดีแน่นอน


1
@ TravisBlack ใช่ฉันเริ่มต้นมันเป็น "ใช่ แต่ ... " แต่จากนั้นก็สงสัยตัวเองและหลีกเลี่ยง ฉันได้ปรับปรุงคำตอบแล้ว :)
Dan Scally

16
เมื่อฝึกอบรมและทดสอบสิ่งของทั้งหมดด้วยเวกเตอร์ที่มีค่าเป็น [0,100] ดังนั้นคะแนนจะอยู่ที่ประมาณ 0.95 ละเอียด. แต่เมื่อการฝึกอบรมกับค่าใน [0100] และทดสอบกับค่าใน [100,200] คะแนนเป็นจริงเป็นศูนย์ คุณได้ย้อนกลับไปพร้อมกับแก้ไข แต่เพื่อทำให้ชัดเจนอย่างไม่น่าสงสัยสำหรับผู้ที่มองเห็น ML ว่าเป็นอาวุธมหัศจรรย์ที่สามารถแก้ปัญหาทั้งหมด: สิ่งที่คุณกำลังเรียนรู้อยู่ที่นั่น: มันไม่ใช่ 'ฟังก์ชั่นสูงสุด'! .
Marco13

2
(กัน: เพื่อแจ้งให้ผู้อื่นเกี่ยวกับการตอบสนองต่อความคิดเห็นของพวกเขาใช้@เหมือนใน@Marco13) เกี่ยวกับคำถาม: ฉันคิดว่าคำสั่งของคุณ"การเรียนรู้ด้วยเครื่องไม่ใช่คำตอบ"ทำให้ชัดเจน ฉันส่วนใหญ่กลัวว่าผู้คนจำนวนมากไม่ได้ใช้การตรวจสอบที่เหมาะสมเมื่อใช้ ML / DL / NNs และโดยเฉพาะอย่างยิ่งเมื่อพวกเขาพบบางสิ่งที่ดูเหมือนว่าจะสามารถ "แก้ปัญหา" โดยไม่เข้าใจว่าทำไมมันถึงทำเช่นนั้น และดังนั้นโดยไม่ต้องรับรู้เมื่อ "โซลูชัน" เป็นเพียงสิ่งประดิษฐ์ของกระบวนการที่ไม่เข้าใจดังนั้น
Marco13

2
@aroth แน่นอน; อย่างดีที่สุดนี่เป็นการประมาณค่าสูงสุด () ที่ใช้กับขอบเขตของข้อมูลการฝึกอบรมที่เห็น ฉันกำลังเล่นกับปัญหา แต่ฉันไม่ได้ตั้งใจที่จะเบี่ยงเบนความรู้สึกหลักของคำตอบของฉันซึ่งไม่ได้ใช้ ML สำหรับปัญหาประเภทนี้
Dan Scally

1
@BradyGilg กำหนดค่าข้อมูลอินพุตให้เป็นมาตรฐาน ... เอ่อ ... ในขณะที่คุณอาจพูดถูกว่าจะให้ผลลัพธ์ที่ "ดีกว่า" ผลลัพธ์ยังคงไม่สมเหตุสมผลเนื่องจาก NN ไม่ใช่ "การเรียนรู้ฟังก์ชันสูงสุด" . และการโต้แย้งอยู่ในวิธีการบางอย่างเห็นได้ชัดทางวิชาการมากอย่างหนึ่ง - ฉันก็จะบอกว่า "นักวิชาการเกินไป": คุณต้องการที่จะคำนวณ / ทำนายของสูงสุดของเวกเตอร์บางส่วนและในการสั่งซื้อในการคำนวณสูงสุดคุณครั้งแรกที่มีการคำนวณนาที / สูงสุดที่จะทำให้เป็นมาตรฐาน (หรือ mean / stdDev สำหรับมาตรฐานซึ่งดูเหมือนจะไม่สมเหตุสมผลเช่นกัน)
Marco13

26

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

คุณสามารถสร้างสถาปัตยกรรมที่ง่ายมากซึ่งรวมถึงฟังก์ชั่นสูงสุด:

net(x) = a * max(x) + b * min(x)

โดยที่aและbเป็นพารามิเตอร์ที่เรียนรู้

ด้วยตัวอย่างการฝึกอบรมที่เพียงพอและชุดฝึกอบรมที่สมเหตุสมผลสถาปัตยกรรมที่เรียบง่ายนี้จะเรียนรู้อย่างรวดเร็วเพื่อตั้งค่าเป็น 1 และ b เป็นศูนย์สำหรับงานของคุณ

การเรียนรู้ของเครื่องมักจะอยู่ในรูปแบบของสมมติฐานที่สนุกสนานหลายประการเกี่ยวกับการแปลงร่างและการเปลี่ยนแปลงของจุดข้อมูลเข้าและการเรียนรู้ที่จะเก็บรักษาเฉพาะสมมติฐานเหล่านั้นที่สัมพันธ์กับตัวแปรเป้าหมาย สมมติฐานจะถูกเข้ารหัสอย่างชัดเจนในสถาปัตยกรรมและฟังก์ชั่นย่อยที่มีอยู่ในอัลกอริทึมแปรปรวนหรือเป็นสมมติฐานที่เข้ารหัสในอัลกอริทึม "พารามิเตอร์"

ตัวอย่างเช่นการเลือกใช้ dot dot และ nonlinearities ซึ่งเป็นเรื่องธรรมดาในเครือข่ายวานิลลานิวรัล ML นั้นค่อนข้างที่จะเป็นไปโดยพล มันเป็นการแสดงออกถึงสมมติฐานที่ครอบคลุมว่าฟังก์ชั่นสามารถสร้างขึ้นได้โดยใช้โครงสร้างเครือข่ายแบบผสมที่กำหนดไว้ล่วงหน้าของการแปลงเชิงเส้นและฟังก์ชั่นเกณฑ์ การกำหนดพารามิเตอร์ที่แตกต่างกันของเครือข่ายนั้นมีสมมติฐานที่แตกต่างกันเกี่ยวกับการแปลงเชิงเส้นที่จะใช้ กล่องเครื่องมือใด ๆ ของฟังก์ชั่นสามารถใช้งานได้และงานของผู้เรียนรู้ด้วยเครื่องจักรคือการค้นพบผ่านความแตกต่างหรือการทดลองและข้อผิดพลาดหรือสัญญาณอื่น ๆ ที่สามารถทำซ้ำได้ซึ่งฟังก์ชั่นหรือคุณสมบัติต่างๆ ในตัวอย่างด้านบนเครือข่ายที่เรียนรู้เพียงแค่ลดฟังก์ชั่นสูงสุดในขณะที่เครือข่ายที่ไม่ได้แยกแยะอาจเป็น "เรียนรู้" ฟังก์ชั่นขั้นต่ำ ฟังก์ชั่นเหล่านี้สามารถแสดงหรือประมาณด้วยวิธีอื่นเช่นเดียวกับในฟังก์ชั่นการถดถอยเชิงเส้นหรือเชิงเส้นประสาทในคำตอบอื่น โดยสรุปแล้วมันขึ้นอยู่กับว่าฟังก์ชั่นหรือชิ้นส่วนเลโก้ที่คุณมีในกล่องเครื่องมือ ML สถาปัตยกรรมของคุณเป็นอย่างไร


4
+1 ML นั้นไม่ได้เป็นอะไรมากไปกว่าสมการการถดถอยที่น่าสนใจและต้องการตัวเลือกที่ถูกต้องของสมการ
aidan.plenert.macdonald

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

นั่นไม่ใช่คำถามเลย OP ถามว่า ML สามารถหา (/ เรียนรู้ / สรุป) ฟังก์ชั่นเช่นmax()(จากข้อมูลที่มีข้อความ) พวกเขาไม่ได้พูดว่า " ระบุว่าคุณมีmax()เป็นแบบ Building Block อยู่แล้ว"
smci

@smci ไม่มี "universal" มาก่อนสำหรับสถาปัตยกรรมหรือฟังก์ชั่นการเรียนรู้ของเครื่อง ดังที่ได้กล่าวไว้ในคำตอบของฉันคุณสามารถประมาณฟังก์ชั่นสูงสุดโดยใช้ฟังก์ชั่นเชิงเส้นแบบแยกชิ้นสลับกับความไม่เชิงเส้น - แต่ไม่มีกฎสากลที่บอกว่า ML ทั้งหมดต้องใช้การแปลงชุดนั้นในกล่องเครื่องมือ เครือข่ายประสาทมักจะ (แต่ไม่เสมอไป) มีฟังก์ชั่นสูงสุดในการกำจัดของพวกเขาผ่านทาง Max Pooling หรือ ReLU จำนวนฟังก์ชั่นฟีเจอร์ที่เป็นไปได้นั้นไร้ขีด จำกัด ซึ่งเป็นเหตุผลที่ฉันเน้นบทบาทของตัวเลือกและความเอนเอียงที่มีแนวโน้มในสถาปัตยกรรม ML
pygosceles

7

ใช่ - การเรียนรู้ของเครื่องสามารถเรียนรู้เพื่อค้นหาจำนวนสูงสุดในรายการตัวเลข

นี่คือตัวอย่างง่ายๆของการเรียนรู้เพื่อค้นหาดัชนีสูงสุด:

import numpy as np
from sklearn.tree import DecisionTreeClassifier

# Create training pairs where the input is a list of numbers and the output is the argmax
training_data = np.random.rand(10_000, 5) # Each list is 5 elements; 10K examples
training_targets = np.argmax(input_data, axis=1)

# Train a descision tree with scikit-learn
clf = DecisionTreeClassifier()
clf.fit(input_data, targets)

# Let's see if the trained model can correctly predict the argmax for new data
test_data = np.random.rand(1, 5)
prediction = clf.predict(test_data)
assert prediction == np.argmax(test_data) # The test passes - The model has learned argmax

มันเรียนรู้ฟังก์ชั่น "สูงสุด" หรือไม่? ชุดการฝึกอบรม 10,000 รายการห้าองค์ประกอบคือการประมาณที่เหมาะสมกับพื้นที่อินพุตที่สมบูรณ์
มาร์ค

2
ข้อจำกัดความรับผิดชอบ: ฉันไม่ใช่ผู้เชี่ยวชาญ ML / DL แต่ฉันค่อนข้างแน่ใจว่าสิ่งนี้ไม่สมเหตุสมผล ฉันหมายถึง: ไม่มีเหตุผลเลย อย่างที่ฉันเห็นคุณไม่ได้เรียนรู้ฟังก์ชั่นสูงสุด คุณกำลังเรียนรู้ดัชนีองค์ประกอบสูงสุดของชุดการฝึกอบรม หากคุณป้อนเวกเตอร์ที่มีตัวเลขสองตัวที่มีขนาดใหญ่กว่าชุดการฝึกอบรมมันอาจจะล้มเหลว ไม่ต้องพูดถึงกรณีที่คุณไม่มี 5D- แต่เป็น 10D-vector การโยนข้อมูลบางส่วนลงในไลบรารีที่ไม่ได้ทำการเปลี่ยนแปลงและการเห็นผลลัพธ์บางอย่างนั้นไม่ได้หมายความว่ามันใช้งานได้
Marco13

ฉันหมายถึงมันขึ้นอยู่กับว่า "การทำงาน" ควรจะหมายถึงอะไร ต้นไม้การตัดสินใจโดยเฉพาะนั้นจะสร้างฟังก์ชันที่มีค่าคงที่ทีละชิ้นเท่านั้นส่วนที่เป็นกล่องสี่เหลี่ยมที่จัดเรียงตามแนวแกน ในตัวอย่างสูงสุด, การฝึกอบรมเกี่ยวกับ hypercube ที่เป็นของแข็ง, ฟังก์ชั่นสูงสุดที่เกิดขึ้นจริงเป็นค่าคงที่ทีละชิ้นในภูมิภาคประเภทสามเหลี่ยม จากตัวอย่างการฝึกอบรมและความลึกที่เพียงพอต้นไม้จะประมาณพื้นที่สามเหลี่ยมเหล่านี้เพื่อความแม่นยำโดยพลการ แต่เช่นเดียวกับรุ่นอื่น ๆ (ส่วนใหญ่?) ตัวอย่างทดสอบใด ๆ ที่อยู่นอกช่วงตัวอย่างการฝึกอบรมนั้นค่อนข้างสิ้นหวัง
Ben Reiniger

นี่ไม่ได้พิสูจน์อะไรเลย สหกรณ์ถาม"สูงสุดในรายการของตัวเลข" คุณคิดว่าพวกมันจะต้องลอยอยู่ในช่วง 0..1 ลองใส่ 2 (หรือ -1 หรือ 1.5) แล้วมันจะล้มเหลว
smci

4

ขั้นตอนวิธีการเรียนรู้

แทนที่จะเรียนรู้ฟังก์ชั่นเป็นการคำนวณที่ทำโดยเครือข่ายประสาทส่งต่อมีโดเมนงานวิจัยทั้งหมดเกี่ยวกับอัลกอริทึมการเรียนรู้จากข้อมูลตัวอย่าง ตัวอย่างเช่นบางคนอาจใช้บางอย่างเช่นเครื่องทัวริงประสาทหรือวิธีอื่น ๆ ที่การดำเนินการของอัลกอริทึมจะถูกควบคุมโดยการเรียนรู้เครื่องที่จุดตัดสินใจของมัน Toy algoritms เช่นการค้นหาค่าสูงสุดหรือการเรียงลำดับรายการหรือการย้อนกลับรายการหรือการกรองรายการมักใช้เป็นตัวอย่างในการวิจัยการเรียนรู้อัลกอริทึม


2

ฉันจะไม่รวมการออกแบบที่มีการศึกษาจากคำตอบของฉัน ไม่มันเป็นไปไม่ได้ที่จะใช้ออกจากการเรียนรู้เครื่องกล่อง (ML) วิธีการที่จะได้อย่างเต็มที่แทนการทำงานสูงสุดสำหรับพลรายการที่มีความแม่นยำโดยพลการ ML เป็นวิธีการใช้ข้อมูลและเป็นที่ชัดเจนว่าคุณจะไม่สามารถประมาณฟังก์ชั่นที่ภูมิภาคที่คุณไม่มีจุดข้อมูลใด ๆ ดังนั้นพื้นที่ของการสังเกตที่เป็นไปได้ (ซึ่งไม่มีที่สิ้นสุด) ไม่สามารถครอบคลุมโดยการสังเกตที่แน่นอน

ข้อความของฉันมีรากฐานทางทฤษฎีพร้อมด้วยทฤษฎีบทการประมาณแบบสากลของ Cybeko สำหรับเครือข่ายประสาท ฉันจะอ้างอิงทฤษฎีบทจาก Wikipedia:

ในทฤษฎีทางคณิตศาสตร์ของเครือข่ายประสาทเทียมสากลประมาณทฤษฎีบทรัฐ [1] ที่เครือข่ายฟีดไปข้างหน้าด้วยชั้นที่ซ่อนเดียวที่มีจำนวน จำกัด ของเซลล์ประสาทสามารถใกล้เคียงกับฟังก์ชั่นอย่างต่อเนื่องในส่วนย่อยกะทัดรัดของ , ภายใต้สมมติฐานเล็กน้อยในฟังก์ชั่นการเปิดใช้งาน ทฤษฎีนี้กล่าวว่าเครือข่ายประสาทง่ายสามารถเป็นตัวแทนของฟังก์ชั่นที่หลากหลายที่น่าสนใจเมื่อได้รับพารามิเตอร์ที่เหมาะสม อย่างไรก็ตามมันไม่ได้สัมผัสกับการเรียนรู้อัลกอริทึมของพารามิเตอร์เหล่านั้นRn

ส่วนที่สำคัญที่สุดคือการเซตกระโดด n คำสั่งเพิ่มเติมนี้จะ จำกัด การประยุกต์ใช้ใกล้เคียงกับฟังก์ชั่นสูงสุดสำหรับ{R} ข้อ จำกัด นี้แสดงให้เห็นในแบบที่ไม่ดีของแบบจำลองจากคำตอบด้วย upvotes มากที่สุดRnxR

หากพื้นที่การสังเกตของคุณมีขนาดกะทัดรัดคุณอาจสามารถประมาณฟังก์ชั่นสูงสุดด้วยชุดข้อมูล จำกัด เมื่อคำตอบที่ได้รับการโหวตให้เด่นชัดคุณไม่ควรบูรณาการวงล้อใหม่!


1

นี่คือการขยายตัวในความคิดเห็นของฉัน เพื่อนำหน้าอย่างแน่นอน @DanScally ถูกต้องที่ไม่มีเหตุผลที่จะใช้ ML สำหรับการค้นหาสูงสุดของรายการ แต่ฉันคิดว่า "มันอาจทำให้ฉันเข้าใจในสิ่งที่การเรียนรู้ของเครื่องทำได้โดยทั่วไป" เป็นเหตุผลที่ดีพอที่จะเจาะลึกลงไปในเรื่องนี้

คุณถามเกี่ยวกับการเรียนรู้ของเครื่องทั่วไปเพิ่มเติม แต่ฉันจะมุ่งเน้นไปที่เครือข่ายประสาท ในบริบทที่เราต้องถามว่าฟังก์ชั่นที่เกิดขึ้นจริงที่ผลิตโดยเครือข่ายประสาทสามารถประมาณ (หรือประเมินว่า)และเพียงแล้วเราสามารถเพิ่มเติมสอบถามว่าใด ๆ ของ (ธรรมดา?) วิธีการฝึกอบรมสามารถใส่ประมาณ NNสูงสุดmaxmax


ความคิดเห็นและคำตอบของ @ MachineLearner ทำให้เกิดทฤษฎีการประมาณแบบสากล: บนโดเมนที่มีขอบเขตเครือข่ายประสาทสามารถประมาณฟังก์ชั่นที่ดีพอสมควรเช่นแต่เราไม่สามารถคาดหวังว่านิรนัยประมาณกับอินพุตโดยพลการ คำนวณได้ทุกที่maxmaxmax

แต่ปรากฎว่าเครือข่ายประสาทเทียมสามารถจัดเรียงหมายเลขอินพุตโดยพลการได้อย่างแน่นอน แท้จริงแล้วจำนวนเต็มบิตสามารถจัดเรียงตามเครือข่ายที่มีเพียงสองชั้นที่ซ่อนของขนาดกำลังสอง โครงข่ายประสาทเชิงลึกที่มีประสิทธิภาพสำหรับการแบ่งและปัญหาที่เกี่ยวข้อง , ทฤษฎีบท 7 ในหน้า 955; ขอบคุณมาก @MimimilianJanisch ในคำตอบนี้สำหรับการค้นหาข้อมูลอ้างอิงนี้n n

ฉันจะอธิบายสั้น ๆ ถึงความเรียบง่ายของวิธีการในกระดาษนั้นเพื่อสร้างฟังก์ชันสำหรับอินพุตที่แตกต่างกันโดยพลการ ชั้นแรกซ่อนประกอบด้วยเซลล์ประสาทเป็นตัวแทนของแต่ละตัวบ่งชี้ตัวแปรสำหรับ<J สิ่งเหล่านี้สร้างขึ้นอย่างง่ายดายเป็นพร้อมตัวบ่งชี้ขั้นตอน เลเยอร์ถัดไปมีเซลล์ประสาทหนึ่งอันสำหรับแต่ละอินพุต ; เริ่มต้นด้วย sum ; นั่นคือจำนวนของเช่นนั้นและด้วยเหตุนี้ตำแหน่งของargmaxn(n2)δij=1(xi<xj)i<jxjxinxij<iδji+j>i(1δij)jxi>xjxiในรายการเรียงลำดับ เพื่อให้ argmax เสร็จสมบูรณ์เพียงขีด จำกัด เลเยอร์นี้
ณ จุดนี้ถ้าเราสามารถคูณได้เราก็จะได้ค่าสูงสุดที่แท้จริงได้ง่ายๆ วิธีแก้ปัญหาในกระดาษคือการใช้การแทนเลขฐานสองของตัวเลขซึ่งการคูณด้วยเลขฐานสองจุดนั้นเหมือนกับการเพิ่มขีด จำกัด ที่เพิ่งได้รับ argmax ก็พอเพียงที่จะมีฟังก์ชั่นเชิงเส้นอย่างง่ายคูณตัวบ่งชี้โดยวันที่และข้อสรุปii


ในที่สุดสำหรับคำถามที่ตามมา: เราสามารถฝึก NN ให้เข้าสู่สถานะนี้ได้ไหม @DanScally เราเริ่มต้น อาจจะรู้ว่าสถาปัตยกรรมในเชิงทฤษฎีสามารถช่วยเราให้แก้ปัญหาได้หรือไม่ (โปรดทราบว่าหากเราสามารถเรียนรู้ / ประมาณน้ำหนักชุดพิเศษด้านบนตาข่ายจะทำงานได้ดีนอกขอบเขตของตัวอย่างการฝึกอบรม)

สมุดบันทึกใน github / Colab

การเปลี่ยนแปลงสิ่งต่าง ๆ เล็กน้อยฉันได้รับคะแนนการทดสอบที่ดีขึ้น (0.838) และแม้แต่การทดสอบตัวอย่างนอกช่วงการฝึกอบรมเดิมก็จะได้คะแนนที่ดี (0.698) การใช้อินพุตที่ปรับสัดส่วนเป็น[1,1]ได้รับคะแนนการทดสอบสูงถึง 0.961 โดยมีคะแนนนอกช่วง 0.758 แต่ฉันให้คะแนนด้วยวิธีเดียวกับ @DanScally ซึ่งดูเหมือนจะไม่น่าไว้วางใจเล็กน้อย: ฟังก์ชันข้อมูลเฉพาะตัวจะทำคะแนนได้อย่างสมบูรณ์ในตัวชี้วัดนี้ ฉันยังพิมพ์สัมประสิทธิ์ออกมาเล็กน้อยเพื่อดูว่ามีอะไรใกล้เคียงกับขนาดพอดีที่อธิบายข้างต้นปรากฏขึ้นหรือไม่ และเอาต์พุตดิบสองสามตัวซึ่งแนะนำว่าแบบจำลองนั้นขี้อายเกินไปในการทำนายค่าสูงสุดโดยมีข้อผิดพลาดทางด้านการทำนายว่าไม่มีอินพุตใดเป็นค่าสูงสุด บางทีการแก้ไขวัตถุประสงค์อาจช่วยได้ แต่ ณ จุดนี้ฉันใช้เวลามากเกินไปแล้ว ถ้าใครสนใจที่จะปรับปรุงวิธีการอย่าลังเลที่จะเล่น (ใน Colab ถ้าคุณชอบ) และแจ้งให้เราทราบ


ฉันยังไม่ได้ห่อหัวกระดาษ (ซึ่งเป็นคณิตศาสตร์หนัก ... และเก่าอย่างน่าประหลาดใจ ... ) แต่ถึงแม้ว่ามันอาจจะเป็นแค่คำว่า "เครือข่าย" ที่คลุมเครือซึ่งนำความสัมพันธ์นี้มาสู่ใจฉัน สงสัยว่าจะมีใครสามารถออกแบบโครงข่ายประสาทที่จำเป็นต้อง "จำลอง" เครือข่ายการเรียงลำดับหรือไม่ ...
Marco13

@ Marco13 แน่นอนฉันคิดว่าการใช้กระดาษนั้นในการสร้าง NNs เพราะตัวเปรียบเทียบจะสร้างการจำลอง NN ของเครือข่ายการเรียงลำดับ มันจะลึกกว่ากระดาษค่อนข้างมาก แต่ความกว้างอาจลดลงเป็นขนาดเชิงเส้นได้
Ben Reiniger

เป็นที่ยอมรับว่าฉันไม่ได้มีส่วนร่วมอย่างลึกซึ้งใน NN อย่างที่ฉันต้องการจะพูดอะไรบางอย่างที่ลึกซึ้ง แต่สิ่งต่าง ๆ เช่น ~ "คุณสามารถเลียนแบบทุกสิ่งด้วยสองชั้น" ฟังดูคล้ายกับผลลัพธ์จากการออกแบบวงจรระดับต่ำที่คุณบอกว่าคุณสามารถ "ใช้ทุกฟังก์ชั่นด้วยประตู NAND สองชั้น" หรืออะไรก็ได้ ฉันคิดว่าNNs บางตัวที่ถูกตรวจสอบเมื่อเร็ว ๆ นี้เป็นเพียงรุ่นแฟนซีของสิ่งที่ผู้คนค้นพบเมื่อ 50 ปีที่แล้ว แต่บางทีนี่อาจเป็นความเข้าใจผิด ...
Marco13

0

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

(แต่ส่วนใหญ่จะพิจารณาว่า overkill นี้น่ากลัวมาก)

(ฉันจะสมมติว่าเราต้องการหา abs สูงสุดของอินพุตเวกเตอร์):

  1. เลือกฟังก์ชั่นการลดความซ้ำซ้อนของค่าสัมบูรณ์เช่น
    f(x)=1x2
  2. สร้างเมทริกซ์ทแยงมุมของBF) ให้เราเรียกมันว่าf(r)Cr
  3. รูปร่างเวกเตอร์เต็มรูปแบบของคนSS
  4. สร้างและแก้ระบบสมการ(ϵI+103StS+Cr)1(103St)
  5. ขอให้เราเรียกผลเวกเตอร์มันจะเป็นการวัดความน่าจะเป็น (ผลรวมถึง 1) เราสามารถชั่งน้ำหนักมันไม่เชิงเส้นเช่นp
    pi=pik|pi|k
  6. เพียงคำนวณผลิตภัณฑ์สเกลาร์พร้อมดัชนีเวกเตอร์และปัดเศษ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.