Separate Role Learning - kimjooyoon/meta-ontology-go GitHub Wiki

비ꡐ와 λΆ„κΈ°λ₯Ό λ”°λ‘œ 배우면 λ‚˜μ•„μ§ˆκΉŒ

Gooo ν•¨μˆ˜ μ•ˆμ— 두 개의 μŠ€μœ„μΉ˜κ°€ μžˆλ‹€κ³  생각해 λ΄…μ‹œλ‹€. ν•˜λ‚˜λŠ” λΉ„κ΅μ‹μ˜ μˆœμ„œ, λ‹€λ₯Έ ν•˜λ‚˜λŠ” 쑰건을 λ§Œμ‘±ν–ˆμ„ λ•Œ μ‹€ν–‰ν•  κ³„μ‚°μž…λ‹ˆλ‹€. μž‘μ€ λͺ¨λΈμ΄ μŠ€μœ„μΉ˜λ₯Ό κ³ λ₯΄λ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ‹€μ œ 본문을 μ‘°λ¦½ν•˜κ³  μ˜ˆμ‹œ 좜λ ₯κ³Ό 쀑간 쑰건을 ν™•μΈν•©λ‹ˆλ‹€.

μ΄λ²ˆμ—λŠ” 두 μŠ€μœ„μΉ˜λ₯Ό ν•œ λͺ¨λΈμ΄ κ³ λ₯΄λŠ” 방식과, 각각 별도 λͺ¨λΈμ΄ λ§‘λŠ” 방식을 λΉ„κ΅ν–ˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈμ„ λ‚˜λˆ„λ©΄ λ‹€λ₯Έ 역할을 배우기 μ‰¬μ›Œμ§ˆ 수 μžˆλ‹€λŠ” κ°€μ„€μ΄μ—ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘œν† μ½œκ³Ό μ†ŒμŠ€λ₯Ό λ¨Όμ € κ³΅κ°œν•œ λ’€ μ„Έ λͺ¨λΈμ„ 각각 ν•œ 번 ν•™μŠ΅ν–ˆμŠ΅λ‹ˆλ‹€.

κ²°κ³Ό

κ΄€μΈ‘ κ³ μ • μˆœμ„œ 곡동 λͺ¨λΈ 역할별 두 λͺ¨λΈ
κ΄€λ ¨ ν‰κ°€μ—μ„œ 첫 λ³Έλ¬Έ 성곡 32/128 30/128 30/128
ν•™μŠ΅μ— μ“΄ λ¬Έμ„œμ—μ„œ 첫 성곡 16/64 16/64 18/64
ν•™μŠ΅μ—μ„œ μ œμ™Έν•œ 계산 μœ ν˜• 16/64 16/64 18/64
μ΅œλŒ€ λ„€ 후보 λ’€ μ΅œμ’… 검사 μΆ©μ‘± 256/256 256/256 256/256
전체 후보 검사 수 640 637 635
전체 λͺ¨λΈ 호좜 수 0 256 512
쑰립 ꡬ간 μ΄μ‹œκ°„ 28.177ms 64.160ms 98.401ms
λ°°ν¬ν•˜λŠ” κ°€μ€‘μΉ˜ λ°°μ—΄ μ—†μŒ 76,136λ°”μ΄νŠΈ 152,272λ°”μ΄νŠΈ

μ—­ν•  λΆ„λ¦¬λ‘œ κ΄€λ ¨ ν‰κ°€μ—μ„œ 8κ°œκ°€ κ°œμ„ λ˜κ³  8κ°œκ°€ μ•…ν™”λμŠ΅λ‹ˆλ‹€. λͺ¨λΈ 호좜과 μš©λŸ‰μ€ 두 λ°°κ°€ λμœΌλ―€λ‘œ 이 ꡬ성을 κΈ°λ³Έκ°’μœΌλ‘œ 채택할 κ·Όκ±°κ°€ λΆ€μ‘±ν•©λ‹ˆλ‹€.

μ μˆ˜λŠ” μ›€μ§μ˜€μ§€λ§Œ 선택은 κ·ΈλŒ€λ‘œμ˜€λ‹€

κ΄€λ ¨ ν‰κ°€μ—λŠ” μ†ŒμŠ€μ™€ κΈ°λŒ€ 좜λ ₯이 κ°™κ³  쀑간 쑰건만 λ‹¬λΌμ§€λŠ” 64쌍이 μžˆμŠ΅λ‹ˆλ‹€. 쑰건을 λ°”κΎΈλ©΄ 두 μŠ€μœ„μΉ˜λ„ λͺ¨λ‘ λ°”λ€Œμ–΄μ•Ό ν•©λ‹ˆλ‹€. 두 ν•™μŠ΅ 방식 λͺ¨λ‘ λͺ¨λ“  μŒμ—μ„œ μ μˆ˜λŠ” λ³€ν–ˆμ§€λ§Œ, 처음 κ³ λ₯Έ μŠ€μœ„μΉ˜λŠ” μ–΄λŠ μŒμ—μ„œλ„ λ°”λ€Œμ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

이 관츑을 λ”°λ‘œ 남긴 μ΄μœ λŠ” λͺ¨λΈ μ μˆ˜κ°€ 쑰금 μ›€μ§μ΄λŠ” 것과 μš”κ΅¬λ₯Ό λ°˜μ˜ν•΄ μ‹€μ œ ν”„λ‘œκ·Έλž¨μ΄ λ°”λ€ŒλŠ” 것 사이에 차이가 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. μ•žμœΌλ‘œλ„ 좜λ ₯·쀑간 쑰건· 처음 κ³ λ₯Έ λ³Έλ¬ΈΒ·μ΅œμ’… μΆ©μ‘± μ—¬λΆ€λ₯Ό 각각 ν™•μΈν•˜λ €κ³  ν•©λ‹ˆλ‹€.

직접 λ°˜ν™˜κ³Ό λ³€μˆ˜ λŒ€μž…μœΌλ‘œ ν‘œν˜„ν•œ 96μŒμ€ λͺ¨λΈ μž…λ ₯Β·μ μˆ˜Β·ν›„λ³΄ μˆœμ„œκ°€ κ°™μ•˜μŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ μŒμ€ 같은 λ¬Έμ„œλ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€. 쌍의 개수λ₯Ό 더해 ν‘œλ³Έμ΄ λŠ˜μ—ˆλ‹€κ³  ν•΄μ„ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€.

λ‚΄ PCμ—μ„œ λ“  λΉ„μš©

Apple M4, 논리 μ½”μ–΄ 10개, RAM 16GiB ν™˜κ²½μ—μ„œ 전체 μ›λž˜ 싀행은 50.62초, μ΅œλŒ€ λ©”λͺ¨λ¦¬λŠ” 54.05MiBμ˜€μŠ΅λ‹ˆλ‹€. CPU μ‹œκ°„μ€ μ‚¬μš©μž 49.39μ΄ˆμ™€ μ‹œμŠ€ν…œ 0.34μ΄ˆμž…λ‹ˆλ‹€. λ²½μ‹œκ³„ μ‹œκ°„μœΌλ‘œ λ‚˜λˆ„λ©΄ 평균 ν•œ μ½”μ–΄μ˜ μ•½ 98.2%에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. μ‹€ν–‰ μ „ν›„ 컴퓨터 전체 CPU μ‚¬μš©λ₯  μ°¨μ΄λŠ” μΈ‘μ •ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λͺ¨λΈ ν•œ 번의 응닡 쀑앙값은 곡동 λͺ¨λΈ 105.063Β΅s, 비ꡐ λͺ¨λΈ 103.792Β΅s, λΆ„κΈ° λͺ¨λΈ 102.834Β΅sμ˜€μŠ΅λ‹ˆλ‹€. μ—­ν•  λΆ„λ¦¬λŠ” 두 번 ν˜ΈμΆœν•˜λ―€λ‘œ ν•˜λ‚˜μ˜ 응닡 μ‹œκ°„λ§ŒμœΌλ‘œ 전체 μ •μ±…μ˜ 지연을 μ„€λͺ…ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 이 μž‘μ€ κ³„μ‚°μ—μ„œλŠ” κ³ μ • μˆœμ„œκ°€ 더 λΉ¨λžμŠ΅λ‹ˆλ‹€.

이 κ²°κ³Όκ°€ μ μš©λ˜λŠ” λ²”μœ„

기쑴의 μ„Έ 계산 ν…œν”Œλ¦Ώκ³Ό μ•Œλ €μ§„ ν•œκΈ€Β·μ˜λ¬Έ ν‘œν˜„μ„ μ‚¬μš©ν•˜κ³  μƒμˆ˜μ™€ λ¬Έμ„œ μ‹λ³„μžλ₯Ό λ°”κΏ¨μŠ΅λ‹ˆλ‹€. ν•™μŠ΅ λ¬Έμ„œ 64개, κ΄€λ ¨ 평가 128개, μ œμ™Έν•œ μœ ν˜• 64κ°œμž…λ‹ˆλ‹€. 각 λ¬Έμ„œμ—λŠ” 좜λ ₯ μ˜ˆμ‹œ 8κ°œμ™€ 쀑간 쑰건 3개, λ”°λ‘œ κΈ°λ‘ν•œ 좜λ ₯ 검사 16κ°œμ™€ 쑰건 검사 3κ°œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ’… 256/256은 이 μœ ν•œν•œ 검사와 λ„€ κ°€μ§€ λ³Έλ¬Έ 후보에 λŒ€ν•œ μ„±μ μž…λ‹ˆλ‹€.

쑰립 μ‹œκ°„μ—λŠ” λͺ¨λΈ νŒλ‹¨Β·κΈ°λ‘ μ“°κΈ°Β·μ»΄νŒŒμΌΒ·μž‘μ„±λœ 검사 싀행이 λ“€μ–΄κ°‘λ‹ˆλ‹€. μ†ŒμŠ€ λ³€ν™˜Β·μ΄ˆκΈ° 후보 μˆ˜μ§‘Β·ν•™μŠ΅Β·λ³„λ„ μ΅œμ’… κ²€μ‚¬λŠ” μ œμ™Έν•©λ‹ˆλ‹€. 이번 μƒμ‚°μžλŠ” λ„€ 후보λ₯Ό 점수순으둜 μ •λ ¬ν•˜λŠ” μ „μš© 경둜λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ μ•žμ„  μ‹€ν—˜κ³Ό μ‹œκ°„ 차이λ₯Ό 직접 λΉ„κ΅ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. Goooμ—μ„œ 읽은 본문을 SDK둜 μ‹€ν–‰ν–ˆκ³  μƒμ„±λœ GoooΒ·Go도 λ³΄κ΄€ν–ˆμŠ΅λ‹ˆλ‹€.

곡개 μžλ£Œμ™€ λ‹€μŒ 질문

256개 μ†ŒμŠ€, 768개 쑰립 기둝, μˆœμ„œλ₯Ό ν¬ν•¨ν•œ 사건 3,448κ°œμ™€ μ‹€νŒ¨Β·μ†μ‹€Β·λΉ„μš©μ„ λ‚¨κ²ΌμŠ΅λ‹ˆλ‹€. κ²€μ‚° μ½”λ“œλŠ” μž¬ν•™μŠ΅μ΄λ‚˜ μƒˆ λͺ¨λΈ νŒλ‹¨ 없이 기둝의 일치 μ—¬λΆ€λ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 곡개 SDK·컴파일러의 κΈ°λ³Έ λͺ¨λΈμ€ μœ μ§€ν•©λ‹ˆλ‹€. μ›λž˜ pushΒ·PR CIκ°€ ν†΅κ³Όν•œ λ’€ SDK main의 ebae7adf에 정상 λ³‘ν•©ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ μ§ˆλ¬Έμ€ 쀑간 쑰건이 각 선택에 μ–΄λ–€ ν˜•νƒœλ‘œ 전달돼야 μ‹€μ œ 선택을 λ°”κΎΈλŠ”κ°€μž…λ‹ˆλ‹€. λͺ¨λΈ 수λ₯Ό λŠ˜λ¦¬λŠ” κ²ƒλ§ŒμœΌλ‘œ 이번 λ¬Έμ œλŠ” 풀리지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€. Goooκ°€ μš”κ΅¬μ™€ ν—ˆμš©λœ 선택을 λͺ…μ‹œν•˜κ³ , 쑰립 결과의 λΆ€μ‘±ν•œ 뢀뢄을 보여 μ£ΌλŠ” κΈ°λŠ₯은 계속 닀듬을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν›„μ†μœΌλ‘œ 읽은 μž…λ ₯ ν‘œν˜„

μ›λž˜ 기둝만 λ‹€μ‹œ 읽어 쑰건을 λ°”κΎΌ 쌍의 μž…λ ₯ 배열을 λΉ„κ΅ν–ˆμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 평가 64μŒμ€ κ°œλ³„ 쑰건 행이 λͺ¨λ‘ λ‹¬λžμ§€λ§Œ, 32개 μ›μ‹œ ν•„λ“œλ₯Ό λ‹¨μˆœ ν‰κ· ν•˜λ©΄ λͺ¨λ“  쌍이 κ°™μ•˜μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ κΈ°μ€€κ°’ 167μ—μ„œ μž…λ ₯은 166Β·167Β·168이고, μ–΄λŠ λͺ©ν‘œλ“  μ°Έ ν•œ κ°œΒ·κ±°μ§“ 두 κ°œμž…λ‹ˆλ‹€. 각 μ—΄μ˜ ν‰κ· λ§ŒμœΌλ‘œλŠ” 참을 μš”κ΅¬ν•˜λŠ” μž…λ ₯이 μ–΄λŠ μͺ½μΈμ§€ κ΅¬λΆ„ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

ν˜„μž¬ κ΅¬ν˜„μ—λŠ” μž…λ ₯ λ°”μ΄νŠΈμ™€ κΈ°λŒ€κ°’μ˜ λΆ€ν˜Έλ₯Ό κ³±ν•œ μΆ”κ°€ ν•„λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이 ν•„λ“œμ˜ 평균은 λͺ¨λ“  μŒμ—μ„œ λ‹¬λΌμ‘Œκ³ , κ°€μž₯ 큰 μ’Œν‘œ μ°¨μ΄λŠ” μ•½ 0.00520833μ΄μ—ˆμŠ΅λ‹ˆλ‹€. ν•™μŠ΅ 32μŒμ—μ„œλ„ κ°™μ•˜μœΌλ©°, 좜λ ₯도 ν•¨κ»˜ λ‹¬λΌμ§€λŠ” affine 32μŒμ€ λ”°λ‘œ μ§‘κ³„ν–ˆμŠ΅λ‹ˆλ‹€.

이 계산은 ν•™μŠ΅λœ ν–‰ 인코더 μ•žμ˜ λ‹¨μˆœ μ‚°μˆ  ν‰κ· μž…λ‹ˆλ‹€. μ‹€μ œ λͺ¨λΈμ€ 각 행을 ν•™μŠ΅λœ κ°€μ€‘μΉ˜μ™€ tanh둜 μ²˜λ¦¬ν•œ λ’€ λͺ¨μœΌκ³  μ†ŒμŠ€ 정보와도 κ²°ν•©ν•©λ‹ˆλ‹€. μ›λž˜ 기둝의 λͺ¨λΈ μ μˆ˜λ„ 이미 λ‹¬λΌμ‘ŒμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이 κ΄€μΈ‘λ§ŒμœΌλ‘œ λͺ¨λΈ λ‚΄λΆ€μ—μ„œ 정보가 μ™„μ „νžˆ μ‚¬λΌμ‘Œλ‹€κ±°λ‚˜ ν•™μŠ΅ μ‹€νŒ¨μ˜ 원인을 μ°Ύμ•˜λ‹€κ³  말할 μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

κ²€μ‚° μ†ŒμŠ€Β·κ³ μ • 원본 지문·전체 μŒλ³„ κ²°κ³Όλ₯Ό κ³΅κ°œν–ˆμŠ΅λ‹ˆλ‹€. 이번 μ½κΈ°μ—μ„œ ν•™μŠ΅Β·λͺ¨λΈ νŒλ‹¨Β·ν›„λ³΄ 싀행은 λͺ¨λ‘ 0νšŒμž…λ‹ˆλ‹€.

λ‹€μŒ λΉ„κ΅μ—μ„œλŠ” ν•™μŠ΅λŸ‰μ„ κ³ μ •ν•˜κ³ , Gooo의 비ꡐ식과 각 쑰건 μž…λ ₯의 관계λ₯Ό 더 μ§μ ‘μ μœΌλ‘œ μ „λ‹¬ν•˜λŠ” ν‘œν˜„μ„ κ²€ν† ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ ν‘œν˜„Β·μƒˆ ν‘œν˜„μ„ μ“°λŠ” μž‘μ€ λͺ¨λΈκ³Ό 결정둠적 쑰건 처리의 λΉ„μš©μ„ ν•¨κ»˜ 비ꡐ해야 ν•©λ‹ˆλ‹€. 선택이 λ°”λ€Œμ—ˆλŠ”μ§€, κ²€μ‚¬ν•˜μ§€ μ•Šμ€ 사둀가 μ–Όλ§ˆλ‚˜ λ‚¨λŠ”μ§€, 전체 쑰립 λΉ„μš©μ΄ 어떀지도 ν•¨κ»˜ λ΄…λ‹ˆλ‹€. 아직 이 후속 λΉ„κ΅λŠ” μ‹€ν–‰ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

쑰건 관계λ₯Ό λ‹΄λŠ” μž…λ ₯ κ΅¬ν˜„

SDK PR65에 λ‹€μŒ μ‹€ν—˜μš© μž…λ ₯을 κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. x < 167의 사둀λ₯Ό μž…λ ₯이 167보닀 μž‘μ€μ§€Β·κ°™μ€μ§€Β·ν°μ§€λ‘œ λ‚˜λˆ„κ³ , 각 κ΅¬κ°„μ—μ„œ μ°Έκ³Ό 거짓을 λͺ‡ 번 μš”κ΅¬ν–ˆλŠ”μ§€ λ”°λ‘œ μ…‰λ‹ˆλ‹€. 참의 κ°œμˆ˜κ°€ 같아도 μ–΄λŠ κ΅¬κ°„μ—μ„œ 참을 μš”κ΅¬ν–ˆλŠ”μ§€ λ‚¨μŠ΅λ‹ˆλ‹€. μ •μˆ˜λŠ” λΉΌκ±°λ‚˜ μ‹€μˆ˜λ‘œ λ°”κΎΈμ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ 비ꡐ해 큰 μ •μˆ˜μ—μ„œλ„ 경계가 흐렀지지 μ•Šκ²Œ ν–ˆμŠ΅λ‹ˆλ‹€.

λͺ¨λΈμ— 전달할 배열은 16개 float32, 64λ°”μ΄νŠΈμž…λ‹ˆλ‹€. μ€€λΉ„λœ μ†ŒμŠ€Β·μ„€λͺ…Β·ν–₯ν›„ λͺ¨λΈκ³Ό μž‘μ—… λ©”λͺ¨λ¦¬λŠ” λ³„λ„μž…λ‹ˆλ‹€. 직접 λ°˜ν™˜κ³Ό λ³€μˆ˜ λŒ€μž…μ€ 같은 관계 배열을 λ§Œλ“€κ³ , 빈 쑰건은 빈 증거둜 λ‚¨μŠ΅λ‹ˆλ‹€. μ§€μ›ν•˜λŠ” λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λ©΄ 이유λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. κΈ°μ‘΄ κ°€μ€‘μΉ˜λŠ” κΈ°μ‘΄ μž…λ ₯을 계속 μ”λ‹ˆλ‹€.

inspect -condition-relations둜 λ³Ό 수 있으며, μž…λ ₯ λ°°μΉ˜μ™€ μ‚¬μš©λ²•μ— 지원 λ²”μœ„λ₯Ό μ μ—ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ 곡개 SDK 예제의 μ„Έ 쑰건을 읽어 두 μ„ νƒμ—μ„œ 관계가 μΌμΉ˜ν•¨μ„ ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 이 μ½κΈ°λŠ” λͺ¨λΈ ν˜ΈμΆœΒ·ν›„λ³΄ μ‹€ν–‰Β·ν•™μŠ΅ 갱신이 λͺ¨λ‘ 0νšŒμž…λ‹ˆλ‹€. 둜컬 νšŒκ·€Β·λ™μ‹œ 싀행·정적 검사와 μ›λž˜ pushΒ·PR CIλ₯Ό 톡과해 SDK main의 eb013ff6에 λ³‘ν•©ν–ˆμŠ΅λ‹ˆλ‹€. 병합 ν›„ CI38098231748도 ν†΅κ³Όν–ˆμŠ΅λ‹ˆλ‹€. 후속288개 μ‹€ν—˜μ—μ„œ κ΄€λ ¨ 첫 선택은32/128μ—μ„œ64/128둜 λŠ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ°„λ‹¨ν•œ κ·œμΉ™λ„ 같은 수λ₯Ό λ§žν˜”κ³  λΉ„μš©μ€ 더 μ μ—ˆμŠ΅λ‹ˆλ‹€. λΆ€λΆ„ 결과와 μ‹€νŒ¨λ₯Ό ν•¨κ»˜ κΈ°λ‘ν–ˆμŠ΅λ‹ˆλ‹€.