본문 바로가기

방명록

  • 프로필사진 Coiner 2016.10.02 15:40

    Coursera의 Machine learning 강좌 듣다가 우연히 블로그 들어오게 되었는데, 정리도 깔끔하게 되어 있고 짧은 영어로 이해가 잘 안되었던 부분들도 명쾌하게 설명되어 있어 너무 감사합니다. 앞으로 자주 방문하게 될 것 같습니다ㅋㅋ 감사합니다~
    답변

  • 프로필사진 BP 2016.09.26 09:51

    델타(4)는 연결된 선의 weight와 연산이 되어 거꾸로 내려가면서 a(3)의 값과 연산이 되는데 이 때 그냥 a(3)가 아니라 편미분된 a(3)와 연산이 됩니다. -> 포스팅 해주신 내용

    1. BP Weight를 조절하면서 J값을 최소화하기 위해 시도하는 알고리즘으로 이해했습니다. 그런데 위 내용과 연관지였을 때 이해가 잘 안되는 부분이 있네요. 예를 들어 layer가 4개일 때 델타(4)는 최종 예측값에서 실제값을 뺴서 계산하고, 델타(4)에 영향을 미치는게 이전 a(3)값과 세타(3)라는 것은 추측해볼 수 있었습니다. 그런데 왜 식이 세타(3)T 곱하기 델타(4)의 식으로 계산을 하나요? a(4)를 구할 때, a(3)X세타(3) 그리고 sigmoid를 씌워서 계산하는데, 반대라고 생각한다면 세타(4)/델타(3)가 되지 않을까요? 왜 저런 식으 계산이 되는건가요?
    #일반적으로 ax=b 일 때, a=b/x로 계산해서 이런 생각을 하게 되었습니다.
    2. 그리고 델타(Δ)가 어떤 의미인가요? 이전에 포스팅해주신 J의 미분값,gradient discent이라고 생각하면 될까요?

    이번에도 질문이 많네요 :-(


    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2016.09.26 22:08 신고

      네~안녕하세요~ 아래 Back Propagation님이 BP님이신가요? 방갑습니다~^^

      그럼 먼저 Neural Network에서 Forward prop과 Back prop를 이야기 해볼께요.

      Forward prop는 입력값 x 로 부터 예측하고자 하는 결과값 y를 찾아가는 방법으로 왼쪽에서 오른쪽으로 진행이 되니 우리가 인지하기 어렵지 않습니다. 이렇게 연산하면서 진행하는 목적은 예측결과를 얻기 위함이지요.

      반대로 Back prop는 예측된 결과로 부터 error를 도출하고 이 error가 이전의 단계에서 어떻게 발생이 되는지를 역추적하는 것이라 오른쪽에서 왼쪽으로 진행이 됩니다. 방향이 역방향이라 어색하고 좀 햇갈리는데요. 이렇게 하는 목적은 최종 결과에 대한 문제(error)는 이전단계에서 얼마나 영향을 미쳤는 지를 찾기 위한 것입니다.

      그래서 theta라는 것은 입력값으로 부터 예측하고자 하는 결과값을 잘 찾기 위한 변수이고, Delta라는 것은 최종 결과에서 발생된 문제(error)가 이전에도 얼마나 문제가 되었나를 찾기 위한 변수가 되는거지요. 두번째 질문 주신 내용에 답변이 되었을까요? ㅎ

      그럼 첫번째 질문 주신 내용에 관련해서, 마지막 layer를 보면은요.
      forward prop의 경우에는 앞유닛의 결과값인 a3과 라인으로 연결되어있는 Theta3이 연산되어 a(4)가 되는 것이고,
      back prop의 경우에는 최종결과의 error 값인 Delta(4)와 라인으로 연결되어 있는 Theta(3)와 연산이 되어 앞유닛의 error값 Delta(3)가 결과가 나오는 것입니다.

      방향이 오른쪽에서 왼쪽으로 연산이 되어 가는것이라 어색하면 전체그림을 뒤집어 보면 좀 익숙해 보일수도 있습니다.^^

      그리고 여기에서 나오는 연산은 설명하기 위해 쉽게 풀어낸 것이고 사실상은 엄청나게 복잡한 편미분의 공식들이 숨어있는 걸로 알고있습니다. ㅠㅠ 미지에 세계인듯요.

  • 프로필사진 Back Propagation 2016.09.23 15:21


    델타(l)j는 l layer에 있는 j 번째 unit에 대한 cost error입니다. 이 델타(i)j를 구하기 위해서는 cost(i) 함수를 z(l)j 로 편미분하여 구하게 됩니다. cost(i) 함수는 위에서 치환한 log 로 구성되어 있는 함수이고 세타로 편미분을 하는 것에서 z 값으로 편미분을 하는 것으로 변경되었습니다. 이로 인해서 cost(i)의 함수내에 있는 h(x)함수가 조금 바뀌게 됩니다.

    이 부분에 대한 질문이 있습니다! 신경망분석도 logistic을 쓰는데, 이 내용이 실려있는 "22. 뇌신경망을 이용한 머신러닝 (Neural Networks) Back Propagation" 에서는 COST 값을 구하는 식에서 H(x) 함수 뒷부분이 바뀌어있습니다. 설명해 주신데로 z값으로 미분을 한다는 점이 차이인데, 왜 z 값으로 미분을 하는지, 어떤 과정을 거쳐서 h(x)가 바뀌는지 궁금합니다!
    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2016.09.23 21:09 신고

      네~ 애매한 부분이기는 하네요^^
      결론 먼저 이야기하면 뒤에 나오는 back prop 개념을 설명하기 위해서 cost함수를 심플하게 바꾼것입니다. 즉, NN이 유닛도 1개이고 아웃풋도 1개인 식으로 만들고 람다도 0으로 놓은것일 뿐입니다.

      z 라는 것도 설명하기 위해서 만들어 놓은거라고 보시면 되는데, z 라는 값은 쉽게 비유적으로 이야기하면 theta * x 입니다. 근데 실제 x feature 는 아니고 바로 앞 유닛에서 발생되는 결과 값인 것이 logistic과 조금 다른데 비슷한 개념이라는 것입니다.

      그러니까, 어떤 하나의 유닛 입장에서 보면 바로 전단계의 결과 값에 theta가 곱해진 자신의 입력값이 바로 변수 z 의 의미에요. (아 완전히 자신의 입력값은 아니네요. sigmoid 를 적용하기 이전 단계의 중간값이니까요)

      그리고 z 를 다시 보면 전단계에서 나오는 결과값은 어떤 숫자(real number)가 될 것이기에 쉽게 생각하면 theta라고 봐도 되는 것이지요. 물론 곱하기 된 theta입니다.

      그런식으로 보면, 마찬가지로 이전에 logistic에서 theta로 편미분하는 것과 크게 다르지 않는 것처럼 설명이 되는것이지요.

      뭐...여기까지는 질문을 주셨으니까 말씀드린 내용이고 실제적으로는 개념만 이해하시면 되는 내용입니다. 수억?개의 많은 layer와 unit들로 구성되어져 있는 NN에서 하나의 유닛을 파고들게 되는 일은 아마도 없을 겁니다. 다 알수도 없고요.^^

      좋은 lib들을 이용하시면 직접 공식으로 구현하지 않아도 알아서 자동으로 계산해줍니다. 그져 우리는 개념만 이해하고 적절한 함수를 호출하기만 하면되니 좋은 세상인거 같네요~ㅎㅎ

  • 프로필사진 (overfitting, regularization) 에서 궁금한 부분이 있습니다. 2016.09.16 23:14

    만약 theta의 값이 작다라는 penalize가 있을 때의 정규화 개념을 이해하는데에는 문제가 없습니다
    그런데 왜 람다의 값이 크면, parameter가 0 값으로 되는 건가요? 이과생이 아닌지라 바로 이해가 되지 않네요
    어떤 이유로 그렇게 되는지 간단한 설명 부탁드립니다
    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2016.09.16 23:39 신고

      네~햇갈리는게 아주 많치요.^^
      람다가 클때 theta 값이 0에 가까이 되는이유는 gradient descent 공식에서 발생합니다.
      theta j := theta j - a( J() + lambda / m * theta j)
      람다가 커지면 뒷부분의 - 항목의 값이 커지니까 결과적으로 theta 값이 아주 작아지게 됩니다.

      그리고 theta 값이 작아져서 0에 가까우게 되면은 theta1 * x1 + theta2 * x2 + .... 에서 결국 x j 의 feature가 없는 것처럼되는 것(x j를 삭제하지 않고도)이라 과최적화를 줄이는 효과가 생기는 것입니다.

    • 프로필사진 질문자 2016.09.17 08:37

      아! theta 값 자체가 작아지기 때문에 그렇네요 감사합니다 :-)

  • 프로필사진 옥타스 함수 관련 궁금한게 있습니다 2016.09.09 08:39

    for i=1:1000
    delta = 1/m * ( h - y )' * X;
    theta = theta - alpha * delta';

    h = X * theta;
    fprintf('cost %f \n', 1/(2 * m) * sum((h - y) .^ 2));
    end

    옥타브가 초급 수준이라서 for문을 배우길
    for (반복 횟수),
    함수
    end;
    로 알고 있습니다. 그런데 위에 있는 for문에는 i 값을 넣어 만든 함수 식이 없는데 어떻게 1-1000번의 시행을 진행하는건가요?

    *그리고 이 부분은 R로 표현한다면...
    for i= 1:1000 {
    delta = 1/m * ( h - y )' * X;
    theta = theta - alpha * delta';
    h = X * theta;
    ?
    }
    "?" 부분에는 어떤 식을 작성해야할까요? 부탁드립니다.
    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2016.09.09 10:24 신고

      for문의 의미는 i 값이 1부터 1000까지 변하면서 for 문 내부의 구문을 반복적으로 수행하는 것인데요. 필요 여부에 따라서 i 값을 사용해도 되고 안해도 반복문은 수행이 됩니다. 여기서는 그져 cost 값이 변하는 것을 로깅 하려고 쓴것이구요.^^

      R은 안해봤지만 검색해보니 cat 함수를 사용하면 될 것 같아보이네요
      (참고: http://www.tutorialspoint.com/r/r_variables.htm)

  • 프로필사진 시돌이 2013.04.26 19:30

    궁금한것이 있습니다.

    1.)
    이 API 함수들이 jQeury mobile .js 파일에 모두 포함되어 있는 것인가요?
    5개 찾아보니 5개 모두 .js 파일에 있던데...

    2.)
    이 API 함수들을 사용자가 재정의 한다면
    .js 파일에 있던 기존 API는 콜이 안되는거죠?

    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2013.04.29 11:12 신고

      1) 네~ 대부분의 소개된 API들은 기본 내장되어 있는 함수들입니다.
      2) 재정의를 어떻게 하시는 가에 따라서 기존 API가 유지되거나 변경 됩니다. 원하시는 함수를 추가하여 사용하시길 권장해드립니다.

  • 프로필사진 리신 2013.04.23 13:43

    안녕하세요 블로그서 타이젠부분을 보구 따라해봤는데요

    감사히 잘 보구 있습니다.

    제가 첨에 설치할때 디벨로퍼 도큐먼트 부분을 체크안해서 지우고 다시깔게 되었는데요

    Native 로 실행했을때 run이 안되고 에러가 나서 도움을 요청합니다.

    //---------------------------------------------------------

    Description Resource Path Location Type
    make.exe: *** [src/MyTest.o] Error 1 MyTest C/C++ Problem

    Description Resource Path Location Type
    recipe for target 'src/MyTest.o' failed subdir.mk /MyTest/Debug-Tizen-Emulator/src line 33 C/C++ Problem

    //---------------------------------------------------------

    에러는 이렇게나오는데 이게 샘플어플리케이션을 오픈해서 실행시킨거든요

    근데 TIZEN을 다시 설치한뒤로 이런 에러가 나고있네요 ㅡㅡ;... Project Explorer 에서는

    Debug-Tizen-Emulator ->src->subdir.mk 부분에 x 가 표시되있어요... ㅜㅜ

    이게 그전엔 잘됬는데 뭔가 잘못꼬여서 그런거같기도하고.. 공부중인데 물어볼때가 없어 갑갑하네요
    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2013.04.29 10:50 신고

      말씀하신 문제는 여러가지를 생각해봐야 할 것 같으네요
      1. 기존 폴더 전체를 삭제하지 않고 덥어쓰면서 재설치를 함
      2. 다른 경로에 재설치를 하면서 경로 설정이 맞지 않음
      3. 설치하다가 에러가 발생함

      가장 빠르고 좋은 방법은 소스를 백업하시고, 타이젠 폴더 전체를 삭제하고 다시 설치하시는 것이 어떨까 합니다.

  • 프로필사진 시돌이 2013.04.11 16:17

    jQueryMobile 질문있어서 찾아왔습니다^^

    대손님 책 보면서 열심히 공부중입니다~

    제가 코딩을 하다가 간혹 헤더, 컨텐트, 풋터를 빼놓고 코딩을 빼먹더라구요..
    근데 웃긴건,
    어떤 코드는 제대로 잘 동작하고
    어떤 코드는 동작 안하고 그러던데...

    영역을 반드시 나눠줘야 하는게 표준인건가요?

    나줘주지 않고 코딩을 하게 되면 어떤 에러점이 발생할 수 있나요?

    궁금합니다^^
    답변

    • 프로필사진 Favicon of https://daeson.tistory.com 대소니 2013.04.16 13:03 신고

      말씀하신 영역은 사용자 입장에서 생각해보면 구분되어 있는것이 편하겠지만(컨텐츠에 따라 다르게 적용됨), 나눠주지 않았다고 에러가 생기지는 않습니다.^^

  • 프로필사진 Favicon of http://wvk.zapatillasadidasoutletsx.com/ adidas baratas 2013.04.04 15:45

    매우 지원, 아주 좋아.
    답변

  • 프로필사진 Favicon of http://www.pandoracharmses.com pandora website 2013.03.26 20:00

    눈을 감아 보아도 귀를 막아 보아도
    답변