[Deep Learning 101] 오토인코더 PyTorch로 구현하기

Ғылым және технология

안녕하세요, 여러분, 이번 영상은 '오토인코더(Autoencoder)'를 PyTorch로 구현한 코드를 소개하는 영상을 준비해보았습니다. MNIST데이터를 받아서 똑같은 MNIST를 생성해내는 학습을 통해 오토인코더가 어떻게 유사한 이미지를 생성해내며, 또 차원축소된 잠재공간이 어떻게 분포되는지 시각화 도구를 사용하여 살펴볼 수 있는 내용도 담아보았습니다. 오늘 예제는 채널 Github페이지에도 올려드렸으니, 편하게 사용하시길 바랍니다. Github페이지 주소는 채널 소개란에 있습니다. 많은 시청 부탁드려요! 늘 감사합니다
#autoencoder #deeplearning #artificialintelligence #오토인코더 #머신러닝 #딥러닝 #인공지능
🎵 Song: 'Sappheiros - Embrace' is under a creative commons license license.
kzread.info/dron/xLK.html...
🎶 Music promoted by BreakingCopyright:
• 🍀 Chill Instrumental [...

Пікірлер: 19

  • @user-ip3fi8me7v
    @user-ip3fi8me7v7 ай бұрын

    오늘도 잘봤습니다. 감사합니다!

  • @phdshinAI

    @phdshinAI

    7 ай бұрын

    넵 시청해주셔서 감사합니다!!

  • @cuizhengri
    @cuizhengri4 ай бұрын

    너무 감사합니다 . 영상 잘보고 있습니다

  • @phdshinAI

    @phdshinAI

    4 ай бұрын

    시청해 주셔서 저도 감사드립니다.

  • @user-gz2wb5nz3y
    @user-gz2wb5nz3y7 ай бұрын

    최고에욥!!

  • @phdshinAI

    @phdshinAI

    7 ай бұрын

    시청해주셔서 감사합니다! 앞으로도 많은 응원과 격려 부탁드립니다.👍🏻

  • @likersnetcom3827
    @likersnetcom38277 ай бұрын

    개념과 코드를 병행해서 가르쳐주시니 너무 좋았습니다. 늘 개념이 코드와 어떻게 연결되는지 궁금했습니다. 감사합니다. 코드를 좀 더 깊이 다뤄주시면 더욱 감사하겠습니다. ^^

  • @phdshinAI

    @phdshinAI

    7 ай бұрын

    네 시청해주셔서 감사드리고, 생산적인 댓글도 감사드려요! 알겠습니다 다음부터는 코드를 좀 더 자세하게 다루도록 하겠습니다. 감사합니다!

  • @user-jh4sb2vy7z
    @user-jh4sb2vy7z7 ай бұрын

    어제 면접 때 AE 부분 물어보셨는데 이 강의봤으면 기깔나게 했을텐데 아쉽네요ㅋㅋㅋ 강의 잘 보고 갑니다~

  • @phdshinAI

    @phdshinAI

    7 ай бұрын

    네 그래도 면접 잘 보셨으리라 생각합니다! 시청해주셔서 감사합니다. 앞으로도 쉽고 재밌는 딥러닝 영상 많이 올리도록 노력하겠습니다. 감사합니다!

  • @iridium3
    @iridium33 ай бұрын

    안녕하세요 박사님, 다름이 아니라 박사님 께서 올려주신 오토인코더 코드 기반으로 주기가 연속적으로 변하는 (커졌다 작아졌다 하는)time domain periodic signal에 대한 노이즈를 제거하고자 시도를 했는데, (사실 주기가 변하는데 주기 신호라 부르는게 맞는지는 모르겠습니다..) 사실상 인덱스가 시간인 1d array라 3~6주기 정도가 대충 포함되는 1000개 정도의 인덱스를 묶어서 1000개의 차원으로 넣어 (100만개 인덱스) 학습을 진행하였는데, 이 경우 노이즈가 제거 되기는 커녕, 주기가 엉망이 되어 대충 평균 낸 주기 값으로 디코딩이 진행되었습니다. 이 경우 특정 인덱스 (시간)단위를 기준으로 넣게 되어 주기가 들쭉 날쭉 들어갈 수 밖에 없는데, 입력 데이터 차원을 어떤 방식으로 넣어 주어야 좋을지 여쭤보고 싶습니다. 감사합니다

  • @phdshinAI

    @phdshinAI

    3 ай бұрын

    안녕하세요? 답변이 느려서 죄송합니다. 그런데 궁금한 점이 있습니다. 질문하신것에 따르면 1000개 정도의 인덱스를 한 묶음으로 해서 1000개의 차원으로 만드셨다고 하셨는데요, 1000개의 차원은 잠재공간에서의 차원을 말씀하시는 건가요? 그리고 입력벡터 한 묶음 (예를들어 3-6주기 단위의 묶음)은 잠재벡터1000개에 다 연결이 되어있는 상황인가요? 어떻게 인코더 디코더를 연결하신건지 잘 모르겠어서 제가 답변을 잘 드릴 수가 없을것 같아요. 좀 더 자세하게 설명해주시면 제가 아는 부분이라면 성심껏 답변하도록 하겠습니다. 감사합니다!

  • @iridium3

    @iridium3

    3 ай бұрын

    @@phdshinAI 쓴다고 썼는데 의미 전달이 많이 모호해진 점 죄송합니다 입력 데이터가 100만개의 정수 1d array이고, 이를 1000개 단위로 쪼개 총 1000묶음으로 넣고 잠재공간의 경우 박사님께서 코드에 적어주신 것과 유사하게 1000=>250 => 12 이런식으로 레이어를 쌓아 만들고 다시 12 => 250 => 1000 이렇게 디코딩 하였습니다. 답변 주셔서 감사드립니다

  • @phdshinAI

    @phdshinAI

    3 ай бұрын

    아닙니다.^^ 제가 정확하게 이해해야 도움이 되는 답변을 드릴 수 있을 것 같아서 그런것이지, 설명이 부정확했던 것은 아닙니다. 일단 잘 알고 계시겠지만, 오토인코더든 다른 어떤 신경망 모델이라도, 학습이 되지 않는데에는 상당히 많은 변수가 있음을 먼저 말씀을 드리고 싶습니다. 딥러닝의 또 다른 한계이기도 한데요, 데이터셋이 커지고, 모델의 비선형성이 증가하면 증가할수록, 어떤 문제가 발생했을 경우 (학습이 안된다든지..) 그 이유에 대한 설명가능성이 현저하게 낮아집니다. 그렇기 때문에, 문제의 근원을 찾아내기가 근본적으로 어려운 것이 딥러닝의 한계라고 볼 수 있습니다. 학습데이터의 퀄러티, 범위, 노이즈의 양, 분량등이 문제일 수도 있고, 모델의 크기, 활성화 함수의 종류, 옵티마이저 등등, 여러가지 가능성이 있을 수 있습니다. 거기에 더하여, 제가 올려드린 오토인코더 코드는, 기본적으로 학습과 이해를 위한 코드이지, 여러가지 면에서 실제 데이터를 학습하는데에는 부적합할 수 있습니다. 그러나 몇가지 생각해 볼 수 있는 부분은, 데이터셋의 수가 100만개라고 하셨고, 그것을 1000개씩, 1000개의 묶음으로 나누셨다고 하셨는데, 1000개의 범주라 하더라도, 12개의 잠재 공간으로 줄인다는 것은 무리가 되지 않을까 생각이 되기도 합니다. 한 범주 안의 데이터가 얼마나 통일성이 있고 분산의 정도가 큰지 제가 알 수가 없기 때문에 일괄적으로 잠재공간 크기에 비해 범주의 수가 많다고 말할 수는 없지만, 제 생각에는 점검해보아야 할 한 요인이 되지 않을까 합니다. 또 학습을 시키는데, 오토인코더의 입장에서 무엇이 남겨야할 시그널 특징이고 어떤 것을 노이즈로 없애버려야 하는지 스스로 학습할 수 있도록, 데이터의 범위를 잘 정해주어야 하는데, 만약 이것이 안 될 경우 하나의 오토인코더로 학습할 수 있는 능력 밖의 경우가 될 수도 있습니다. 예를들어서 시계열 데이터의 경우 1Hz의 데이터셋이라면, 10Hz나 100Hz같은 고주파의 특성들은 노이즈로 캔슬해서 지워버리면 되겠지만, 10Hz의 데이터셋의 경우는 10Hz는 남기고 100Hz는 지워야 하는데 이럴 경우, 이 모든 데이터를 한 오토인코더에서 학습을 시켜야 한다면, 오토인코더의 입장에서는 잠재공간에서 10Hz가 시그널인지 노이즈인지 판단 하기가 어려울 수 있습니다. 이처럼 특정 범주의 데이터를 오토인코더에 넣어서 어떤 노이즈를 제거하고 시그널을 남길 것인지를 고려해서, 과연 오토인코더가 처리할 수 있는 수준의 데이터셋인지를 판단하는 것도 중요할 것 같습니다. 그래서 제가 추천드리는 방법은, 1000개의 범주를 처음부터 다 하지 말고, 가장 기본적인 데이터셋, 한 범주 정도만 넣어서 과연 오토인코더에서 노이즈 캔슬링 학습이 되는지부터 살펴보는 것입니다. 그러면서 어떤 활성화 함수가 수렴이 빨리 되는지, 어떤 옵티마이저가 잘 되는지 등등 파일럿 테스트를 먼저 돌려보는것을 고려해보시면 좋을 것 같습니다. 그리고 가장 좋은 것은 먼저 기존연구사례들을 먼저 조사하셔서 @iridium3님의 데이터셋과 학습 목적에 가장 부합하는 유사한 이전논문들과 실험들을 보셔서 선행연구자들이 이 문제를 해결하기 위해 어떻게 접근하는지 방법론들을 공부하시면서 @iridium3의 데이터셋에 적용해 보시는 연습을 하는 것이 가장 실력이 빨리 느는 길인것 같습니다. 어쩌면 오토인코더 말고 다른 모델이 더 적합할지도 모르는 일이니까요. 제가 @iridium3의 데이터셋과 그 데이터들을 어떻게 분류해서 어떻게 오토인코더에 학습을 시키는지 정확한 내용을 모르는 상태라 일반적인 해법을 드릴 수 밖에 없고, 또 어느 정도는 부정확할 수도 있음을 양해 부탁드립니다. 좋은 질문 감사드리고, 언제든 궁금하신 부분이 있다면, 소통하면서 같이 고민하면 좋겠습니다. 감사합니다!

  • @iridium3

    @iridium3

    3 ай бұрын

    @@phdshinAI 정성스런 조언 감사합니다 박사님 말씀대로 비슷한 특성의 데이터를 먼저 분류 해보고 해당용례를 트래킹 해보며 모델을 비교해봐야 할 듯 하네요 항상 감사드립니다!

  • @iridium3
    @iridium37 ай бұрын

    안녕하세요 박사님, 지금까지 박사님 올려주신 영상들을 보면 기초지식 임에도 정말 다양한 모델들을 공부했는데요, 문장 구성 등에 쓰일 것 같던 RNN도 패션 구별 같은 이미지 처리에도 쓰이곤 하던데, 박사님이 생각하시기에 글자 인식 측면에서 가장 정확도가 높게 나올 수 있는 방법은 어떤거라고 생각하시나요? CRNN 같이 혼용하는게 제일 높으려나요 항상 양질의 영상과 답변 진심으로 감사합니다

  • @phdshinAI

    @phdshinAI

    7 ай бұрын

    안녕하세요! 항상 시청해주시고 좋은 댓글로 함께해주셔서 늘 감사드립니다. 잘 아시겠지만, 글자인식은 보통 CNN을 많이 씁니다. 가장 간편하고 또 인식률도 높기 때문입니다. 하지만 글자 인식도 어떤 상황이냐에 따라 접근법이 다를 수 있습니다. 예를들면 MNIST같이 데이터셋 자체가 이미 글자만 따로 되어 있어서 그 글자들을 인식해야 하는 경우도 있고, scene-text같이 어떤 사진이나 동영상 (예를들면 네비게이션 녹화 화면에 보이는 표지판의 글자)에서 글자를 인식해야 하는 경우도 있고, 혹은 글자 즉 알파벳 캐릭터 한글자 한글자를 인식해야 하느냐, 아니면 단어를 인식해야 하느냐 등등 상황은 다 다르기 때문에 상황별로 접근법을 달리 해야할것으로 생각됩니다. 보통 MNIST계열의 깨끗한 글자 인식 (혹은 숫자인식)은 CNN 계열의 모델이 많이 쓰이고 scene-text같은 경우는 트랜스포머 계열의 모델이나 말씀하신 CRNN도 사용되기도 합니다. 보통 자신이 구현하고자 하는 상황과 가장 유사한 상황을 다루고 있는 논문들을 먼저 보시고, 그 논문들에서 가장 많이 쓰이는 모델 계열들을 한번 보시면 대략 감이 오실 것으로 생각됩니다. 항상 열공하시는 모습이 멋있으십니다. 감사합니다!

  • @iridium3

    @iridium3

    7 ай бұрын

    @@phdshinAI clean 글자의 경우 글자 혹은 배경 밖에 없어서 cnn만으로도 잘 나오지만 실제 상황에서는 box를 만드는 과정이 선행되야 하니까 그런가보네요 항상 고견 주셔서 감사드립니다

  • @phdshinAI

    @phdshinAI

    7 ай бұрын

    네 아무래도 인간의 눈은 어떤 상황에서도 자동적으로 잘 구분하지만 컴퓨터가 하게 만드는 일은 여러가지 상황을 다 고려해야하는것 같습니다. 감사합니다!

Келесі