목록분류 전체보기 (413)
오답노트

전체 구조 지금까지 본 신경망은 인접하는 계층의 모든 뉴런과 결합되어 있었다. 이를 완전연결(fully-connected)이라고 하며 완전히 연결된 계층을 Affine 계층이라는 이름으로 구현했다. CNN에서는 새로운 '합성곱 계층'과 '풀링 계층'이 추가된다. CNN의 계층은 'Conv-ReLU-(Pooling)' 흐름으로 연결된다. 주목할 또 다른 점은 출력에 가까운 층에서는 지금까지의 'Affine-ReLU' 구성을 사용할 수 있다는 것이다. 도 마지막 출력 계층에서는 'Affine-Softmax' 조합을 그대로 사용한다. 합성곱 계층 완전연결 계층의 문제점 완전연결 계층에서는 인접하는 계층의 뉴런이 모두 연결되고 출력의 수는 임의로 정할 수 있다. 완전연결 계층의 문제점은 '데이터의 형상이 무시'..

매개변수 갱신 신경망 학습의 목적은 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것이고 이는 곧 매개변수의 최적값을 찾는 문제이다. 이러한 문제를 푸는 것을 최적화라고 한다. 지금까지 최적의 매개변수 값을 찾는 단서로 매개변수의 기울기(미분)를 이용했다. 매개변수의 기울기를 구해, 기울어진 방향으로 매개변수 값을 갱신하는 일을 몇번이고 반복해서 점점 최적의 값에 다가갔다. 이것이 확률적 경사 하강법(SGD)이란 단순한 방법인데, 지금부터 SGD의 단점과 다른 최적화 기법을 알아보자. 모험가 이야기 가장 크게 기울어진 방향으로 가자는 것이 SGD의 전략이다. 이 일을 반복하면 언젠가 깊은 곳에 찾아갈 수 있을지 모른다. 학률적 경사 하강법(SGD) class SGD: def __init__(self..

수치 미분은 단순하고 구현하기도 쉽지만 계산 시간이 오래 걸린다는게 단점이다. 이번엔 가중치 매개변수의 기울기를 효과적으로 계산하는 '오차역전파법(backpropagation)'을 배워보자. 오차역전파법을 제대로 이해하는 방법으로는 수식을 통한 것과 계산 그래프를 통한 것이 있다. 전자 쪽이 일반적인 방법으로, 특히 기계학습을 다루는 책 대부분은 수식을 중심으로 이야기를 전개한다. 하지만 계산 그래프를 사용하면 시각적으로 이해할 수 있다. 계산 그래프 계산 그래프는 계산 과정을 그래프로 나타낸것이다. 여기서 그래프는 복수의 노드와 엣지(노드 사이의 직선)로 표현된다. 계산 그래프로 풀다 계산 그래프는 계산 과정을 노드와 화살표로 표현한다. 노드는 원으로 표기하고 원 안에 연산 내용을 적는다. 또, 계산 ..

학습이란 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것이다. 신경망이 학습할 수 있도록 해주는 지표는 손실 함수다. 손실 함수의 결과값을 가장 작게 만드는 가중치 매개변수를 찾는 것이 학습의 목표다. 데이터에서 학습한다 데이터 주도 학습 기계학습에서는 사람의 개입을 최소화하고 수집한 데이터로부터 패턴을 찾으려 시도한다. 데이터에서 특징을 추출하고 그 특징의 패턴을 기계학습 기술로 학습하는 방법이 있다. 여기서 말하는 특징은 입력 데이터에서 본질적인 데이터를 정확하게 추출할 수 있도록 설계된 변환기를 가리킨다. 하지만 문제에 적합한 특징을 쓰지 않으면 혹은 특징을 설계하지 않으면 좀 처럼 좋은 결과를 얻을 수 없다는 뜻이다. 신경망의 이점은 모든 문제를 같은 맥락에서 풀 수 있다. 세부..

퍼셉트론은 복잡한 함수도 표현할 수 있다. 하지만 가중치를 설정하는 작업 즉, 원하는 결과를 출력하도록 가중치 값을 적절히 정하는 작업은 여전히 사람이 수동으로 한다는 것이다. 그러나 신경망은 가충치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 성질이 있다. 퍼셉트론에서 신경망으로 신경망의 예 아래 그림은 신경망이다. 여기서 가장 왼쪽 줄은 입력층, 맨 오느쪽 줄은 출력층, 중간 줄은 은닉층이다. 은닉층의 뉴런은 입력층이나 출력층과 달리 사람 눈에는 보이지 않는다. 퍼셉트론 복습 퍼셉트론을 수식으로 나타 냈을때, b는 편향을 나타내는 매개변수고 뉴런이 얼마나 쉽게 활성화되느냐 제어한다. 한편, w1,w2는 각 신호의 가중치를 나타내는 매개변수로, 각 신호의 영향력을 제어한다. 위 그림은 퍼셉트론..

퍼셉트론이란 퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력. 다만 퍼셉트론의 신호는 1 또는 0의 두 가지 값을 갖는다. 입력으로 2개의 신호를 받는 퍼셉트론이다. x1 과 x2 는 입력 신호 y는 출력 신호, w1,w2는 가중치다. 원을 뉴런 혹은 노드라고 부르고 입력 신호가 뉴런에 보내질 때, 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 임계값를 넘어 설 때만 1을 출력한다. 이를 뉴런이 활성화한다고 표현한다. 임계값은 θ(세타,theta)로 표현한다. 수직은 아래와 같다. 퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다. 즉 가중치가 클수록 해당 신호가 중요하다! 단순한 논리 회로 ..

본 포스트를 쓰는 시점에서 모든 빅 프로젝트관련 활동은 끝났고 이력서, 자기소개서, 면접 준비와 같은 취업준비에 대한 활동들만 남은 상태다. 에이블 스쿨에 들어오기 전 많은 것들을 놓고 들어왔다. 직업, 경력, 심지어 사람 마저도 마지막 대단원만 남았다 생각했을 땐, 가슴이 뭉클했으나 곧 쉼 없이 달려야한다는 의미와 같았다. 빅 프로젝트에서 크게 하는 활동들과 아쉬웠던 점을 중심으로 설명해본다. 워크샵 KT가 대기업이다 보니 보안에 민감한 편이다. 그래서 워크샵 이름도 단톡방에서 오르고 내렸을 때, KT 내부에서는 나름 껄끄러웠다는 카더라 통신이 에이블러 사이에서도 돌기도 했다. 그래서 나도 조심스레 그냥 워크샵이라고 칭하겠다. 워크샵은 총 3일동안 진행됐다. 첫째날은 조원들이 각자 작성해서 가져온 제안..

미니프로젝트 6차 AI 허브 등 미리 어노테이션 되어있는 데이터를 가지고 Yolo를 학습시키는 방법들을 배웠고, 이를 토대로 간단한 CV 서비스를 구상하여 구현해봤다. 생각보다 어노테이션 데이터셋의 크기가 커서 로컬 환경에서는 무리가 있었다. 공모전에도 느낀거지만 학습 환경이 너무 중요하다. IT인프라/ 가상화 네트워크 AWS를 위해 리눅스를 배우고 AWS에서 아주 기본적인 서버를 할당 받는 방법과 k8s와 도커등을 배웠다. 개념적으로는 수업을 들을 때 이해가 됐지만, 막상 무엇을 어떻게 해야할지 감이 잘 오지 않는다. 리눅스는 나중에 실무에서 꼭 필요한 경험이라고 생각되어 열심히 들었지만 아직도 윈도우가 편한건 어쩔 수 없나보다. 웹프로그래밍 JS의 기초를 배우는데 내가 알던 프로그래밍 언어의 틀을 많..

개요 개요 빅프로젝트를 위해서 네이버 카페 크롤링을 해야하는 상황이 생겼다. 그런데 하는 과정에서 어떻게 해야될지 조금 헤맸는데, 정리 해놓으면 좋을거 같아서 정리한다. 카페 접속 링크 크롤링 우선 네이버에서 VIEW 탭에 카페로 필터링한 결과이다. 해당 페이지는 스크롤을 내리면 10개씩 검색 결과를 추가로 가져온다. 개발자 도구에서 스크롤을 내렸을 때 보내는 요청을 확인해 봤다. 위 사진은 스크롤 했을 때만 필터링하여 받아온 데이터를 확인한 것이다. 보아하니 js로 함수를 만들어 놓고 스크롤을 내릴 때 함수를 호출해서 정보를 가져오는 것 같다. 이렇게 받아온 정보들에서 페이지에 출력된 카페들의 접속 url을 크롤링했다. 카페 게시글 크롤링 다음은 url에 접속하여 카페 내부의 게시글 내용을 크롤링해야한..

Media File Media File 은 유저가 업로드하는 정적 파일을 의미한다. Media File은 서비스를 해야지 유저가 업로드하므로 Static File 처럼 서비스 시, 개발 시를 구분하여 file을 생각할 필요는 없다. 유저가 업로드 했을때 Media File을 업로드 했을 때 Medai File이 저장될 위치만 지정하면된다. settings.py 에서 다음과 같이 정의하자. MEDIA_URL은 url로 접속할 때 사용하고, MEDIA_ROOT는 url로 접속했을 때 찾아가는 디렉토리이다. 하지만 개발할 때에는 위 경로를 자동으로 찾아가지 않는다. 그래서 아래와 같은 코드를 추가해서 개발할 때에도 찾아갈 수 있도록 해줘야한다. 아래 코드는 절대 앱의 urls.py가 아닌 프로젝트의 urls...