영상 잘 봤습니다. 그런데 한 가지 궁금한 것은, 적자생존의 과정에서 입력값을 적합하게 잘 알아보는지 아닌지에 대해서는 ‘누가’ 어떤 기준으로 판단을 하는 걸까요? 진화에서는 생존에 적합한 방식에 따라서 걸러진다는 것을 알지만, 이러한 유전 알고리즘에서는 어떤 방식으로 선택을 받는지 궁금합니다.
그부분은 설계자가 판단 하는것은 아니고, 인공지능 스스로가 판단 가능합니다. 예를 들어 게임을 플레이 하는 인공지능을 유전 알고리즘으로 학습 한다고 했을때에는 실제로 인공지능들을 게임을 플레이 하도록 시켜보고 해당 게임에서 높은 점수를 얻거나 오래 살아남는 캐릭터(?)들이 적합하다(적자 ->생존)고 판단 될수 있겠습니다. 댓글 감사합니다.
안녕하세요 영상 잘 보고 있습니다. 유전알고리즘의 인공신경만 적용 부분을 좀 더 알고싶어서 글 남겨요 (제가 유잔알고리즘을 잘 몰라서 질문이 정상적인지 모르겠네요ㅜ) 0. N개 자손의 신경망에서 초기 가중치는 각각 다르게 적용하는 건가요(완전 random?) 아님 동일하게 적용하는 건가요? 1. 유전알고리즘을 인공신경망에 작용할때는 각 노드의 연결부분의 DROPOUT을 유전 알고리즘으로 적용을 하는 것인가요? (제가 알기론 binary 형식인 유전알고리즘만 봐서ㅜㅜ) 2. 유전 알고리즘을 사용해서 n개의 자식을 만들고, 그중 가장 좋은 결과를 가진 자손을 다시 교배하잖아요. 그럼 이때, 각 자손은 사용자가 지정한 일정 수준(like... epoch 10000..)만 학습시킨 결과만을 가지고 우성을 가려내는 건가요? 3. 우성 자손을 가지고 교배를 한다음 다음 학습을 진행할때 초기 가중치는 가장 최근에 업데이트 된 가중치를 사용하나요 아님 새로 랜덤값을 부여하나요? 질문이 난잡해서 죄송합니다. ㅜ 답변 부탁드려요~ 감사합니다!!
안녕하세요 댓글 감사합니다! Q0. N개의 자손의 초기 가중치 > 네 맞습니다 100명의 1세대를 생산한다면 모두 RANDOM 하게 가중치들을 초기화 합니다. 첫세대에 최대한 다양한 가중치를 가지는 다양한 개체들을 만들어야 유전알고리즘을 통해 교배 - 후세대 생성시 보다 정답에 다가갈 수 있는 확률이 높아 집니다. Q1. 유전알고리즘 적용시 각 노드에 dropout을 적용하는지? > dropout 기법을 적용할수도 있으나 일반적으로는 유전알고리즘에 dropout 기법을 사용하지는 않습니다. (사용할지도...?) 대신 유전알고리즘에는 mutation (=돌연변이) 이라는 dropout과 유사한 기법을 사용합니다! dropout처럼 특정 노드의 학습을 하지 않는 것은 아니고, 특정 노드에서 나가는 weight들의 값을 무작위로 돌연변이 시켜주는 기법이에요! 예를들어 신경망의 두번째 층의 3번째 노드에서 뻗어 나가는 가중치가 10개가 있었는데 그 10개를 일정 확률로 모두 random하게 바꿔주는 방식입니다. 물론 돌연변이가 일어날 확률은 매우 낮게 설정해요! (보통 10% 이하) 우성 인자간의 교배 (crossover)뿐만아니라 돌연변이 (mutation) 도 적자생존 이론에 중요한 이론이에요. 쉬운예로, 어쩌다가 '목이 긴 생물이 돌연변이'로 태어났는데 다른 개체들보다 나무의 잎을 잘 먹을수 있어 생존한 경우가 있을수 있으니까요. ※ 여기서 한가지. '유전알고리즘을 통한 신경망 학습'은 일반적인 (학습데이터기반) 신경망 학습과는 조금 달라요. 가장큰 차이는 back-propagation 같은 '최적화 단계가 없다'는겁니다. 일반적으로 DNN 학습할때는 '학습데이터'가 있고, 데이터를 feed-forward 해본뒤에 네트워크에서 나오는 결과가 우리가 기대하는 결과 (label or class)와 다르면 최적화로 weight들을 보정을 해줍니다. 가장 일반적으로 gradient descent (convex 함수의 미분) 방식으로 back-propagation 수행을 하죠. 그러나 유전알고리즘은 그런 학습데이터를 미리 다 확보해둔 상태에서 최적화를 하면서 네크워트를 학습하는것이 아니고, 일단 아무것도 모르는 상태의 신경망들을 무지막지하게 많이 만들구요 (Q0. 질문의 답변처럼 N개의 random한 자손 생성), 생성된 모든 네트워크들에 입력을 그냥 일단 한번 넣어보고 나오는 아웃풋들을 확인합니다. 그중 우리가 기대하는 output에 가까운 신경망들만 남기고 남은 신경망들끼리만 서로의 가중치 값을 섞는것입니다. 즉, 그냥 우연하게 맞은 애들끼리 계속 섞어 가다보면 언젠가는 정답에 가까운 신경망이 탄생하는 방법이에요. 지금 있는 네트워크에 피드백을 줘가며 조정하는것이 아니라 글러먹었다고 판단되는 네트워크는 그냥 없애버리는 잔인한(?) 기법입니다. 쉽게 다시 정리하자면, 1. 학습데이터 기반의 최적화 기법 = 수식적, 수학적: 목적을 달성하기 위해 미분값으로 답을 찾아간다!, 네트워크 하나만 고려하고 정답과 다르면 그친구에게 채찍질 해가며 피드백을 줘서 더 완벽하게 교육 시킨다. 2. 유전알고리즘 = 샘플링 기법, 확률적 : 우연일지라도 100명중 한놈은 좋은놈이 있겠지... 떡잎부터 글러먹은 네트워크는 없애버린다. 괜찮은 애들끼리 weight를 섞어 목표하는 값에 도달하게 한다. 너무 말이 장황했네요... 조금이나마 이해가 되셨으면 좋겠습니다! Q2. 네트워크 교배 (cross-over)시 우성을 가려내는 기준? > 위에 설명드린대로, 유전알고리즘의 네트워크는 하나의 네트워크에 여러 epoch을 거쳐가며 '가중치가 업데이트 되는것이 아닙니다'. 현재 생성된 네트워크가 우성인 기준은 해당 네트워크에 입력값을 넣어봤을때 원하는 기대값에 얼마나 가까운지로 평가합니다. 쉬운예를 들자면, 유전알고리즘으로 1942 비행기 게임을 플레이 하는 신경망을 학습한다고 하면, 우성네트워크는 실제 게임을 시켜봤을때 '게임 플레이 점수가 높은 네트워크가 우성'입니다. 보통은 현재 세대에서 상위 10% 정도의 성능을 내는 네트워크들을 우성으로 선택하고 그들끼리 교배하여 후대 네트워크를 생성합니다. Q3. 다음 세대 네트워크 생성 방법 >간단한 예로, 1세대에 100개중 10개만 우성 신경망라고 한다면, 10개의 우성네트워크만으로 10C2= 45가지 교배를 할 수 있습니다. (10개중 2개 선택하는 경우의 수) 교배 방법은 설계자 마음대로 할수 있지만 보통 A 신경망에서 "절반", B 신경망에서 "절반" 가져와 C라는 자식 신경망을 만들어냅니다. 그런데 2세대도 인구수 (population)을 100명으로 유지하기 위해서는 55명을 더 생성해야 하겠네요. 이또한 방법은 설계자가 설정하기 나름이지만 저는 55명은 완전 random 한 신경망들로 새로 생성해줬습니다. (사실 교배 방법 자체를 다양하게 하면 둘째도, 셋째도 태어나게 할수 있죠..^^) ※ 즉! 위의 방법은 예시일 뿐이며, 설계자 마음대로 설정해도 됩니다. 다만 적당한 수의 우성인자들은 항상 있어야 하며 그들의 가중치가 후대에 전해지게는 만들어야 올바르게 학습이 됩니다. 수학적인 최적화가 아니라 확률적으로 하다보면 맞겠지라는 접근방법이라서, 교배 방법에 정답은 없습니다. 유전 알고리즘에 대해서는 워낙에 많은 분석과 이론이 있고 내용이 방대 합니다. 제가 아는 유전 알고리즘의 지식은 매우 초보 적임을 말씀드립니다 ㅜㅜ. 답변이 너무 길었네요... 항상 시청해주셔서 감사합니다. - 일상코딩
ANN에서 가중치를 수정할때 은닉층이 몇개정도면 역전파보다 더 좋나요?
영상 잘 봤습니다. 그런데 한 가지 궁금한 것은, 적자생존의 과정에서 입력값을 적합하게 잘 알아보는지 아닌지에 대해서는 ‘누가’ 어떤 기준으로 판단을 하는 걸까요? 진화에서는 생존에 적합한 방식에 따라서 걸러진다는 것을 알지만, 이러한 유전 알고리즘에서는 어떤 방식으로 선택을 받는지 궁금합니다.
그부분은 설계자가 판단 하는것은 아니고,
인공지능 스스로가 판단 가능합니다.
예를 들어 게임을 플레이 하는 인공지능을 유전 알고리즘으로 학습 한다고 했을때에는
실제로 인공지능들을 게임을 플레이 하도록 시켜보고 해당 게임에서 높은 점수를 얻거나 오래 살아남는 캐릭터(?)들이 적합하다(적자 ->생존)고 판단 될수 있겠습니다.
댓글 감사합니다.
@@dailycoding00 아하. 이 알고리즘도 퍼셉트론처럼 신경망에 자동적으로 가중치를 부여하는 것과 유사한 원리겠군요. 답변 감사합니다!
안녕하세요 영상 잘 보고 있습니다.
유전알고리즘의 인공신경만 적용 부분을 좀 더 알고싶어서 글 남겨요
(제가 유잔알고리즘을 잘 몰라서 질문이 정상적인지 모르겠네요ㅜ)
0. N개 자손의 신경망에서 초기 가중치는 각각 다르게 적용하는 건가요(완전 random?) 아님 동일하게 적용하는 건가요?
1. 유전알고리즘을 인공신경망에 작용할때는 각 노드의 연결부분의 DROPOUT을 유전 알고리즘으로 적용을 하는 것인가요? (제가 알기론 binary 형식인 유전알고리즘만 봐서ㅜㅜ)
2. 유전 알고리즘을 사용해서 n개의 자식을 만들고, 그중 가장 좋은 결과를 가진 자손을 다시 교배하잖아요. 그럼 이때, 각 자손은 사용자가 지정한 일정 수준(like... epoch 10000..)만 학습시킨 결과만을 가지고 우성을 가려내는 건가요?
3. 우성 자손을 가지고 교배를 한다음 다음 학습을 진행할때 초기 가중치는 가장 최근에 업데이트 된 가중치를 사용하나요 아님 새로 랜덤값을 부여하나요?
질문이 난잡해서 죄송합니다. ㅜ 답변 부탁드려요~ 감사합니다!!
안녕하세요 댓글 감사합니다!
Q0. N개의 자손의 초기 가중치
> 네 맞습니다 100명의 1세대를 생산한다면 모두 RANDOM 하게 가중치들을 초기화 합니다. 첫세대에 최대한 다양한 가중치를 가지는 다양한 개체들을 만들어야
유전알고리즘을 통해 교배 - 후세대 생성시 보다 정답에 다가갈 수 있는 확률이 높아 집니다.
Q1. 유전알고리즘 적용시 각 노드에 dropout을 적용하는지?
> dropout 기법을 적용할수도 있으나 일반적으로는 유전알고리즘에 dropout 기법을 사용하지는 않습니다. (사용할지도...?)
대신 유전알고리즘에는 mutation (=돌연변이) 이라는 dropout과 유사한 기법을 사용합니다!
dropout처럼 특정 노드의 학습을 하지 않는 것은 아니고, 특정 노드에서 나가는 weight들의 값을 무작위로 돌연변이 시켜주는 기법이에요! 예를들어 신경망의 두번째 층의 3번째 노드에서 뻗어 나가는 가중치가 10개가 있었는데 그 10개를 일정 확률로 모두 random하게 바꿔주는 방식입니다. 물론 돌연변이가 일어날 확률은 매우 낮게 설정해요! (보통 10% 이하)
우성 인자간의 교배 (crossover)뿐만아니라 돌연변이 (mutation) 도 적자생존 이론에 중요한 이론이에요. 쉬운예로, 어쩌다가 '목이 긴 생물이 돌연변이'로 태어났는데 다른 개체들보다 나무의 잎을 잘 먹을수 있어 생존한 경우가 있을수 있으니까요.
※ 여기서 한가지. '유전알고리즘을 통한 신경망 학습'은 일반적인 (학습데이터기반) 신경망 학습과는 조금 달라요. 가장큰 차이는 back-propagation 같은 '최적화 단계가 없다'는겁니다.
일반적으로 DNN 학습할때는 '학습데이터'가 있고, 데이터를 feed-forward 해본뒤에 네트워크에서 나오는 결과가 우리가 기대하는 결과 (label or class)와 다르면 최적화로 weight들을 보정을 해줍니다. 가장 일반적으로 gradient descent (convex 함수의 미분) 방식으로 back-propagation 수행을 하죠.
그러나 유전알고리즘은 그런 학습데이터를 미리 다 확보해둔 상태에서 최적화를 하면서 네크워트를 학습하는것이 아니고,
일단 아무것도 모르는 상태의 신경망들을 무지막지하게 많이 만들구요 (Q0. 질문의 답변처럼 N개의 random한 자손 생성),
생성된 모든 네트워크들에 입력을 그냥 일단 한번 넣어보고 나오는 아웃풋들을 확인합니다. 그중 우리가 기대하는 output에 가까운 신경망들만 남기고 남은 신경망들끼리만
서로의 가중치 값을 섞는것입니다. 즉, 그냥 우연하게 맞은 애들끼리 계속 섞어 가다보면 언젠가는 정답에 가까운 신경망이 탄생하는 방법이에요. 지금 있는 네트워크에 피드백을 줘가며
조정하는것이 아니라 글러먹었다고 판단되는 네트워크는 그냥 없애버리는 잔인한(?) 기법입니다.
쉽게 다시 정리하자면,
1. 학습데이터 기반의 최적화 기법 = 수식적, 수학적: 목적을 달성하기 위해 미분값으로 답을 찾아간다!, 네트워크 하나만 고려하고 정답과 다르면 그친구에게 채찍질 해가며 피드백을 줘서
더 완벽하게 교육 시킨다.
2. 유전알고리즘 = 샘플링 기법, 확률적 : 우연일지라도 100명중 한놈은 좋은놈이 있겠지... 떡잎부터 글러먹은 네트워크는 없애버린다. 괜찮은 애들끼리 weight를 섞어 목표하는 값에 도달하게 한다.
너무 말이 장황했네요... 조금이나마 이해가 되셨으면 좋겠습니다!
Q2. 네트워크 교배 (cross-over)시 우성을 가려내는 기준?
> 위에 설명드린대로, 유전알고리즘의 네트워크는 하나의 네트워크에 여러 epoch을 거쳐가며 '가중치가 업데이트 되는것이 아닙니다'.
현재 생성된 네트워크가 우성인 기준은 해당 네트워크에 입력값을 넣어봤을때 원하는 기대값에 얼마나 가까운지로 평가합니다.
쉬운예를 들자면, 유전알고리즘으로 1942 비행기 게임을 플레이 하는 신경망을 학습한다고 하면, 우성네트워크는 실제 게임을 시켜봤을때 '게임 플레이 점수가 높은 네트워크가 우성'입니다. 보통은 현재 세대에서 상위 10% 정도의 성능을 내는 네트워크들을 우성으로 선택하고 그들끼리 교배하여 후대 네트워크를 생성합니다.
Q3. 다음 세대 네트워크 생성 방법
>간단한 예로, 1세대에 100개중 10개만 우성 신경망라고 한다면, 10개의 우성네트워크만으로 10C2= 45가지 교배를 할 수 있습니다. (10개중 2개 선택하는 경우의 수)
교배 방법은 설계자 마음대로 할수 있지만 보통 A 신경망에서 "절반", B 신경망에서 "절반" 가져와 C라는 자식 신경망을 만들어냅니다.
그런데 2세대도 인구수 (population)을 100명으로 유지하기 위해서는 55명을 더 생성해야 하겠네요. 이또한 방법은 설계자가 설정하기 나름이지만 저는 55명은 완전 random 한 신경망들로 새로 생성해줬습니다. (사실 교배 방법 자체를 다양하게 하면 둘째도, 셋째도 태어나게 할수 있죠..^^)
※ 즉! 위의 방법은 예시일 뿐이며, 설계자 마음대로 설정해도 됩니다. 다만 적당한 수의 우성인자들은 항상 있어야 하며 그들의 가중치가 후대에 전해지게는 만들어야 올바르게 학습이 됩니다.
수학적인 최적화가 아니라 확률적으로 하다보면 맞겠지라는 접근방법이라서, 교배 방법에 정답은 없습니다.
유전 알고리즘에 대해서는 워낙에 많은 분석과 이론이 있고 내용이 방대 합니다. 제가 아는 유전 알고리즘의 지식은 매우 초보 적임을 말씀드립니다 ㅜㅜ.
답변이 너무 길었네요... 항상 시청해주셔서 감사합니다.
- 일상코딩
@@dailycoding00 감사합니다!!!!!!!!!!!!!! 질문자는 아니지만 도움이 많이 됐습니다
안녕하세요? 교배 방식은 세대마다 달라지게 짜는건가요? 안 달라지면 자식세대에 할아버지 세대랑 똑같은 개체가 나오는 알고리즘이 짜여질 거 같아서요
교배 방식은 자유이지만 보통
아버지에서 절반 어머니에서 절반을 가져 옵니다. 너무 단순하게 가져 올 경우 맆송님 말처럼 더 윗세대와 비슷한 손자 세대가 발생할수도 있어서 최대한 random 하게 유전자를 섞는 기법들이 있습니다