2018/11/25 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 1 - 특성의 scale

2018/12/10 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 2 - step 공식 이해하기

2019/01/28 - [Study/인공지능학습] - [머신러닝 Reboot] 개념잡기 : 경사 하강법 3 - 경사 하강법의 종류

2019/04/07 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사 하강법 4 - 규제가 있는 선형 모델

2019/04/14 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사하강법5 - 로지스틱 회귀

TISTORY 에디터의 문제로 이미지 크기가 화면 폭에 꽉 차게 나오는
문제 양해 부탁드립니다...ㅠ.ㅠ

 

머신러닝 Reboot - 개념 잡기 : 경사하강법5 - 로지스틱 회귀

이제 거의 회귀의 끝자락이다. 사실 로지스틱 회귀의 경우 인공지능에 대한 공부를 처음 시작할 무렵 꽤나 공을
들여 열심히 정리한 바가 있다(물론 맞는 말을 써 놓은 것인지는 여전히 의문이다…ㅠ.ㅠ). 따라서 이번 포스팅
에서는 간략하게 개념적인 요소만 정리하고 보다 세세한 부분은 이전 포스팅의 링크로 대체하고자 한다.

 

확률 그리고 분류

앞서 언급했던 회귀 모델들은 모두 새로운 샘플이 나타났을 때 그에 대한 결과를 예측하는 것이 주 목적이었다.
하지만 로지스틱 회귀의 경우 예측을 하기는 하지만 그 예측이 확률값을 갖도록 하는 것이다. 

 

예를들어 동물의 특성(다리 갯수, 몸의 크기, 날개의 유무 등)을 데이터로 하여 로지스틱 회귀는 이 동물이 개일 
확률이 92%, 닭일 확률이 8%이라는 예측 결과를 리턴한다. 하지만 결국 이 결과는 어떤 동물의 데이터를 
가지고 이 동물을 닭이나 개로 분류하는 기능을 하게 되는 것이다.

 

 

이렇듯 확률 값을 리턴해야 하기 때문에 선형 회귀의 가설 함수와는 달리 로지스틱 회귀의 가설 함수는 0~1
사이의 값을 리턴해야 하며 이를 위해 선형 회귀 가설 함수에 대한 새로운 함수를 정의하게 되는데 이 함수를 
시그모이드 함수라고 한다.

 

한편 위 예에서와 같이 분류할 대상(클래스)가 2개 밖에 없는 경우를 이진 분류라고 하며 기본적인 로지스틱
회귀는 이진 분류기라고 할 수 있다.

 

시그모이드 함수

시그모이드 함수는 앞서 살펴본 바와 같이 0과 1사이의 값을 출력하는 S자형 그래프를 그리는 함수로 다음과 
같은 형태의 함수이다.

 

 

이 식에서 t는 선형 회귀의 가설 함수인데 t가 0보다 작은 경우에는 시그모이드 함수의 결과 값이 0에 가까워
지고 t가 0보다 크거나 같은 경우에는 시그모이드 함수의 결과 값은 1에 가까워진다.

 

보다 상세한 내용은 링크로 대신한다.

 

로지스틱(Logistic) 회귀 함수 살펴보기 

 

로지스틱 회귀의 비용함수

로지스틱 회귀에서 기존의 선형 회귀 비용 함수를 그대로 사용하게 되면 비용 함수의 그래프가 다수의 지역
최솟값이 발생하는 형태가 되어 전역 최솟값을 찾는데 실패하는 경우가 많이 발생한다. 이러한 문제를 해결
하고자 로지스틱 회귀의 비용함수에서는 log를 사용하게 된다. 

 

 

이진 분류의 경우 y 값이 어떤 클래스에 포함되느냐(1), 포함되지 않느냐(0)의 2가지 값만을 갖기 때문에
y가 어떤 값이냐에 따라 앞의 로그식 또는 뒤의 로그식 하나만 사용되는 형태이다. 그리고 이 함수는 지역
최솟값이 존재하지 않는 convex 함수로 최솟값을 찾아낼 수 있다.

 

역시 상세한 내용은 링크로 대신한다.

 

로지스틱회귀의 비용함수 이해

 

결정경계

이진 분류기에서 두 개의 클래스를 구분짓는 선을 결정경계라고 하며 이는 보통 모델이 50% 확률을 추정하는
지점이 된다.

 

소프트맥스 회귀

3개 이상의 클래스를 분류하는 것은 2진 분류기를 여러개 훈련시켜 할 수 있다. 소프트맥스 회귀는 여러개의
이진분류기를 사용하는 방법을 일반화 시켜 한 번에 3개 이상의 클래스를 분류할 수 있도록 만든 모델이다.
소프트맥스 함수도 다양한 표현이 가능한데 ⎡핸즈온 머신러닝⎦에 사용된 식을 기준으로 보면 다음과 같다.

 

 

이 때 각각의 기호는 다음을 의미한다.

 

  1. K는 클래스 수
  2. s(x)는 샘플 x에 대한 각 클래스의 점수를 담고 있는 벡터
  3. σ 함수는 샘플 x에 대한 각 클래스의 점수가 주어졌을 때 이 샘플이 클래스 𝑘에 속할 추정 확률

 

소프트맥스 회귀는 서로 배타적인 클래스에 대한 분류에만 사용 가능하다는 특징이 있다.

소프트맥스 회귀는 비용함수로 크로스 엔트로피 함수를 사용하는데 역시 핸즈온 머신러닝에 사용한 식을
기준으로 보면 다음과 같다.

 

 

앞서 말했듯이 소프트맥스 회귀는 로지스틱 회귀의 일반화 된 형식으로 크로스 엔트로피 함수를 클래스가 딱
2개인(즉, K=2 인) 경우에 적용하면 로지스틱 회귀의 비용함수와 동일해진다.

역시 상세한 설명은 이전 포스팅을 링크한다.

 

다항로지스틱회귀 살펴보기

로지스틱 회귀 비용함수로부터 Cross-entropy 도출하기

 

정리

예전에 처음 공부를 시작했을 때도 여기서부터가 어려워졌던 것 같다. 기존 선형 회귀도 잘 이해가 안가는
상황에서 확률까지 등장을 하니…그래도 두 번째 정리라 조금 나아지긴 했지만 조금 더 깔끔하게 다듬어야
할 필요는 있을 것 같다. 다듬는 것은 숙제로 남겨두고 서포트 벡터 머신으로 넘어가자…-.-

 

숙제

  1. 핸즈온 머신러닝 로지스틱 회귀 챕터에 나오는 예제 소스들을 분석하고 실행시켜보자
블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

 

2018/11/25 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 1 - 특성의 scale

2018/12/10 - [Study/인공지능학습] - [머신러닝 reboot] 개념 잡기 : 경사 하강법 2 - step 공식 이해하기

2019/01/28 - [Study/인공지능학습] - [머신러닝 Reboot] 개념잡기 : 경사 하강법 3 - 경사 하강법의 종류

2019/04/07 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사 하강법 4 - 규제가 있는 선형 모델

2019/04/14 - [Study/인공지능학습] - [머신러닝 Reboot] 개념 잡기 : 경사하강법5 - 로지스틱 회귀

 

 

머신러닝 Reboot - 개념 잡기 : 경사 하강법 4 - 규제가 있는 선형 모델

 

지난 시간까지 일반적인 선형 회귀에 대해 알아보았다. 하지만 당연하게도 세상의 문제는 너무도 다양하고 따라서
그 문제를 해결할 수 있는 방법도 다양할 수 밖에 없다. 오늘은 그 중에서도 훈련 데이터에만 너무 최적화된 결과를
만들어내는 과대 적합의 문제를 해결할 수 있는 선형 회귀에 대해 정리해보자.

 

과대적합

 

지난 포스팅의 후반부에 다항 회귀에 대해서 알아보았다. 다항 회귀는 데이터의 분포가 2차 이상의 함수
그래프 형태를 띠고 있는 경우 사용하는 기법으로 보통 적절한 차수의 특성을 훈련 데이터에 추가하여 학습을
진행한다. 이 때 지나치게 차수를 높이면 아래 그래프의 초록색 실선과 같이 상당히 난해한 결과가 나온다.
이렇듯 모든 훈련 데이터 하나하나에 맞는 결과를 만들어내는 것을 과대적합이라고 한다. 

 

 

비유를 하자면 기성복과 맞춤복의 차이라고 할 수 있겠다. 
A라는 회사에서 직원들의 유니폼을 맞춤복으로 하기로 결정했다면 새로운 직원이 들어올 때마다 유니폼을 그 
직원에 맞춰서 새로 만들어야 할 것이다. 하지만 유니폼을 기성복으로 결정한 경우에는 직원에 따라 조금 크기도
하고 조금 작기도 하겠지만 하나의 사이즈로 보다 많은 직원들에게 지급을 할 수 있게 된다.

 

다시 말해 기존 직원들(훈련 데이터) 각자에게 꼭 맞는 유니폼을 만들게 되면 새로운 직원이 들어왔을 때 다시 치수를
조정한 유니폼을 만들어야 한다. 하지만 기성복으로 몇개의 사이즈를 준비해 놓는다면 새로운 직원이 들어와도
미리 준비한 유니폼을 지급만 하면 될 것이다.

 

이렇듯 보다 일반적인 상황에 적용을 하기 위해서는 과대적합을 피하는 것이 좋다. 다만 과대적합을 피하기 위한
노력이 과하게 되면 오히려 과소적합에 빠질 수 있으니 주의해야 한다.

일반적으로 모델이 너무 복잡한 경우 과대적합에 빠지기 쉽고 모델이 너무 단순한 경우 과소적합에 빠지기 쉬운데
이를 편향/분산 트레이드 오프라고 한다 (핸즈온 머신러닝 179쪽 참조). 

 

규제란?

 

규제란 말 그대로 어떤 한도를 정하고 그 한도를 넘지 못하도록 제한하는 것을 말한다. 우리가 이제까지 보아 온 선형
회귀 모델은 기울기(가중치)와 절편(bias)을 가지고 있었다. 이 모델은 기울기와 절편을 적절히 조절하고 조합해서
최적의 결과를 찾게 되는데 이 때 기울기를 0으로 만들게 되면 조절할 수 있는 대상이 절편 하나로 줄어 제약이 발생한다.
이렇게 조절할 수 있는 대상을 줄여가는 것을 규제라고 한다. 다만 대상을 완전히 없애는 것은 너무 극단적이므로 규제의
대상이 적절한 범위 내의 값만을 갖도록 하는 것이 일반적이다.

 

여기서 규제의 대상이 되는 것은 일반적인 선형 회귀에서는 기울기(가중치)이며 다항회귀의 경우에는 특성의 차수이다
(하지만 특성의 차수를 제한 하는 것도 결국은 높은 차수의 특성에 붙어 있는 가중치를 0으로 만듦으로써 가능하니 
결국은 규제라 함은 가중치를 제약 하는 것으로 보면 되겠다). 

 

이러한 규제를 가하는 경우는 대체로 2가지 정도의 경우가 있는데 한가지는 확보한 데이터가 충분하지 않을 경우이고
다른 한가지는 일부 특성들 간에 밀접한 상관 관계가 있을 경우이다. 이를 다중공선성이라 한다. 

 

이렇듯 규제를 가하는 것은 특성을 조절하고자 할 때 사용하는 방법이다 따라서 편향에 대해서는 규제를 가하지 않고
특성의 가중치에 대해서만 규제를 가하게 된다. 

 

다음과 같이 생각해보자.
선형 회귀의 비용 함수를 떠올려보면 훈련 데이터에서 특성 𝑥와 실제 결과 𝒚는 이미 주어진 값이며 가중치 𝜭를 변경해
가면서 최솟값을 찾는데 비용함수가 최솟값이 되었을 때 가중치 𝜭는 최적값이 된다. 이렇게 모든 특성에 대해 가중치가
최적값일 경우를 바로 과대적합이라고 볼 수 있는 것이다. 결국 가중치에 규제를 가하여 과대적합을 바로잡을 수 있는 
것이다.

 

일반적으로 가중치에 규제를 가하기 위해서는 비용 함수 뒤에 가중치 벡터의 크기(norm)을 더하게 되는데 바로 다음과 
같은 형태가 된다.

 

 

최솟값 = 비용함수 + 가중치 벡터의 크기

 

 

비용함수에 대해서는 이미 알고 있고…뒤에 따라붙는 가중치 벡터의 크기는 무엇을 의미하는가?
그냥 단순히 식을 분석해도 알 수 있지만 위의 식은 비용함수가 최솟값이 되어야 한다는 조건에 추가적으로 가중치의
크기도 최소가 되어야 한다는 제약이 붙게 되는 것이다. 당연한 이야기지만 덧셈식이니 두 항이 모두 최소가 될 때
식의 결과도 최소가 되는 것이 아니겠는가?

 

그럼 구체적인 방법들을 살펴보면서 조금 더 자세하게 알아보도록 하자.

 

릿지 회귀

 

릿지 회귀는 비용함수 뒤에 규제항을 더하여 과대적합을 막는 방법으로 이 때 사용되는 규제항은 다음과 같다.

 

릿지 회귀 규제항

 

릿지 회귀 비용 함수

 

이 규제항은 벡터의 길이나 크기를 나타내는 norm 중 L2 norm의 제곱을 2로 나눈 것에 해당한다(여기서 2로 나눈 것은
비용함수에서와 마찬가지로 미분 결과를 간단히 만들기 위해서이다). 또한 앞에 붙은 𝜶는 그 값에 따라 규제의 정도가 
정해지는 하이퍼파라미터로 예를들어 이 값이 0이라면 규제항 전체가 0이 되어 기존 선형 회귀의 비용함수만 남게되어 
규제를 적용하지 않는다는 의미가 되는 것이다.

 

직관적으로 확인하기 위해 직접 식을 만들고 값을 대입하여 정리를 해보자(아래 정리한 내용은 말 그대로 감을 익히자는
의도일 뿐 실제로 이런 식으로 계산이 진행되지는 않는다. 또한 여기서는 미분까지 진행하지 않으므로 1/2는 뺐다). 

아래와 같은 가설 함수가 있다.

 

가설 함수

 

이 가설함수에 대한 릿지 회귀 비용함수는 다음과 같다(w = 𝜭 이다).

 

릿지 회귀 비용 함수

 

여기서 임의로 𝑥1 = 3, 𝑥2 = 2, 𝑦 = 14라는 값을 정하고 𝜭 1과 𝜭 2를 구해보자. 다양한 𝜭 1과 𝜭 2의 조합을 만들어
낼 수 있다. 아래는 그 중 몇가지 𝜭 1과 𝜭 2의 조합을 표로 만들어 본 것이다. 만일 일반적인 선형 회귀였다면 선형 회귀의
비용함수가 0이되는 조합이 선택이 되었을 것이다(주황색 셀). 하지만 규제항이 더해짐으로 해서 최종적인 최솟값을
만들어내는 조합은 이전 조합과 달라진다(초록색).

 

 

또한 우연인지 필연인지…이 표에서 보면 가중치 𝜭 1과 𝜭 2가 전체적으로 균등한 크기로 작어지는 효과를 보이고 있다.
이렇게 릿지 회귀의 경우 규제항이 제곱 함수로 가중치의 크기가 커질수록 비용함수의 결과값에 영향을 많이 미치게 된다.
따라서 값이 큰 가중치를 제한하는 효과가 있다.

 

라쏘 회귀

 

라쏘 회귀 역시 비용함수 뒤에 규제항을 더하는 것은 릿지 회귀와 동일하다 다만 규제항의 식은 다음과 같다.

 

라쏘 회귀 규제항

 

라쏘 회귀 비용 함수

 

이 규제항은 벡터의 길이나 크기를 나타내는 norm 중 L1 norm에 해당한다. L1 norm은 벡터를 구성하는 요소의
절대값의 합으로 여기서도 가중치 𝜭1와 𝜭2의 절대값의 합으로 계산하면 된다. 또한 라쏘 회귀의 규제항 같은 경우
1차 함수로 미분 불가능한 형태이기 때문에 2로 나누는 부분이 없다.

 

위의 릿지 회귀에서와 동일한 조건으로 계산식을 구성해보면 다음과 같다.

 

 

릿지 회귀에서와 마찬가지로 라쏘 회귀의 경우에도 규제항이 더해짐으로 해서 단순 선형 회귀와는 다른 조합의 가중치
벡터가 선택이 된다. 릿지 회귀와 다른 점이라면 앞서 언급했듯이 규제항이 가중치 벡터 요소들의 절대값의 합이라는
점이다. 이러한 이유로 규제항을 최소화 시키는 방향이 크기가 작은 가중치는 0으로 만들어버리는 경향이 있어 특성의
일부만을 선별하는 효과를 갖게 된다. 

 

엘라스틱넷

 

앞서 보았듯이 릿지 회귀와 라쏘 회귀는 가중치를 다루는 방법이 조금 다르다. 다시 말해 각각의 용도가 다르다고 할 수
있는 것이다. 이렇게 서로 다른 상황에 사용될 수 있는 두 제약을 하나의 식으로 묶어 어떤 상황에서든 유연하게 사용할 수
있도록 만든 것이 바로 엘라스틱넷이다. 엘라스틱넷의 비용함수는 다음과 같다.

엘라스틱넷 비용함수

 

여기서 중요한 역할을 하는 것이 바로 r이라는 하이퍼파라미터로 릿지 회귀와 라쏘 회귀의 비중을 결정하는 파라미터이다.
극단적으로 r이 1이라면 라쏘 회귀로 작동하며 r이 0이라면 릿지 회귀로 작동하게 되는 것이다.

 

이렇게 3가지 형태의 규제가 있는 회귀 모델을 살펴보았는데 ‘핸즈온 머신러닝’을 인용하여 정리하면 다음과 같다.

 

1. 일반 선형 회귀는 가급적 사용하지 않는 것이 좋다.
2. 일반적으로는 릿지 회귀가 좋다.
3. 실제로 영향을 미치는 특성이 몇 개 정도라면 라쏘 회귀나 엘라스틱넷이 좋다.
4. 특성 수가 훈련 샘플 수보다 많거나 특성 몇 개가 강하게 연관되어 있다면 엘라스틱넷이 좋다. 

 

 

조기 종료

 

위에 언급한 규제 모델 외에 반복적인 학습 알고리즘에서 사용할 수 있는 방법으로 조기 종료가 있다. 이 방법은 검증
에러가 최소에 도달하는 즉시 훈련을 멈추는 것을 말한다. 조기 종료는 매우 효과적이지만 간단하게 구현할 수 있다.
(핸즈온 머신러닝 P186 참조)

 

정리

 

개념적으로는 이해가 가는 내용이지만 이 것을 어떻게 증명해야 하는지가 막연했던 내용들이다. 마치 공부 잘하는 녀석
들이 훌륭하게 공식을 이용하여 문제를 풀어낼 때 나같은 수포자들은 숫자를 하나 하나 대입해가면서 답을 찾아가듯이
말이다…그러다보니 몇쪽 안되는 이 부분을 정리하는데 거의 한 달이 걸렸다(그러고서도 충분하지 않다…ㅠ.ㅠ).

일단 진도는 뽑아야겠기에 이정도 선에서 마무리를 하고 다음 내용으로 넘어가야겠다.

 

숙제

 

  1. 릿지 회귀와 라쏘 회귀의 특징을 시각적으로 볼 수 있도록 python으로 구현해보자! 

  2. 책(핸즈온 머신러닝)에 나온 관련 그래프들을 정확하게 이해해보자!

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

[자영이] 서치

문화 2019.04.01 00:51

서치

자영이는 전거를 타면서 본 화 야기입니다.
말 그대로 실내 자전거로 운동하면서 지루함을 달래기 위해 아이패드로 본 영화에 대해 극히 
주관적으로 아무런 논리적 분석 없이 의식의 흐름에 따라 적어 내려간 초 간단 감상문임을
참고해주세요.

 

 

원제 : Searching
상영 : 2017년
장르 : 드라마, 스릴러
감독 : 아나쉬 차간티
출연 : 존 조, 데브라 메싱
시청 : 넷플릭스
개인평점 : ★★★★☆

 

버드박스와는 달리 이 영화는 한 번 봐야지 하고 벼르고 있던 영화였다. 공중파 TV의 영화 소개 프로그램을 통해
봤을 때 모든 scene이 컴퓨터 화면을 통해 보여진다는 점이 매우 흥미로웠다. 아마도 내가 늘 컴퓨터를 맞대고 사는 
IT업계 종사자이기에 더 그랬는지도 모르겠다.

 

또한 주연배우 존 조의 경우 내가 그를 처음 알게 된 것이 2009년 방영된 미드 플래시포워드를 통해서였는데 그 때
한국계 배우라서 그랬는지 조금 친근하게 다가왔던 기억이 있다(여담이지만 플래시포워드 참 재밌게 봤는데 나만
재밌었는지 시즌1에서 막을 내렸다…ㅠ.ㅠ 뒷얘기가 무척 궁금하다…). 

 

극중에서 심각한 표정으로 모니터를, 카메라를 들여다 보고 있는 그의 연기는 작품에 몰입할 수 있게 해주는 충분한 
계기가 되었다. 큰 액션 없이 이렇게 표정만을 가지고 연기를 하는 것도 쉽지는 않을 것이다.

 

사실 영화 내내 배우들의 얼굴이 PC내의 각종 영상 프로그램을 통해 보여지는 것이 신선하기도 한 반면에 정말 저렇게
까지 우리가 SNS나 디지털 기기에 매몰되어 살고있는가 하는 의문이 들기도 하고 또 아무리 여섯 다리만 건너면 모든 
지구인을 다 알 수 있다지만 클릭 몇번에 저렇게 신상이 탈탈 털리는 것이 조금은 과장되지 않았나 싶기도 하지만 충분히 
납득이 되는 설정임은 분명하다.

 

이 영화는 디지털의 홍수 속에서 살아가는 현대인의 삶을 긴장 넘치는 스릴러로 만들어낸 영화이지만 한편으로는 삶의
전통적인 면, 바로 가족, 부모와 자식의 이야기이기도 하다. 이 이야기의 두 축은 두 가족이자 두 부모이다. 심각하지는
않지만 문제가 없다고 할수는 없는 정도로 거리가 있어보이는 가족과 파국에 이를 정도로 지나치게 밀착된 가족…

 

자식이 가해자가 되었든 피해자가 되었든 그 부모의 심정과 행동은 법과 도덕의 테두리에서는 용서를 받지 못할 것이라
할지라도 최소한 연민은 느낄 수 있다. 세상은 무섭게 변하여 디지털 도구로 수많은 일들, 심지어 사람 사이의 관계를
이어가는 일들조차 가능하다지만 디지털 세상 속에 보여지는 부모라 할지라도 손편지를 쓰던 시절의 부모와 크게
달라지지 않았음은 아이러니라면 아이러니일까…(어쨌든 자식 관리 잘 하려면 디지털에 적응해야 한다는 교훈이…-.-)

 

결론적으로 실험적인 영상과 그 제한적인 장면들 속에서 긴장의 끊을 놓치지 않게 하는 연출력은 분명 칭찬을 받을만한
좋은 영화라고 생각한다.

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

 

2019/01/13 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #1

2019/01/21 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #2

2019/03/03 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #3

2019/03/11 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #4

2019/03/31 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #5  (이번 글)

2019/06/09 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #6

2019/07/20 - [Study/아두이노] - [아두이노] 미니 드론 만들기 #7

아두이노 미니 드론 만들기 #5

흘러간 시간에 비해 진척이 없는 것이 좀 안타까운 현실이다.
지난 포스팅까지 새로운 부품을 구해 나름 보기 좋게 드론 프레임에 장착을 하였다. 이제 번거로운 하드웨어 작업이
끝났으니 슬슬 소프트웨어 작업만 시작하면 되겠거니 생각을 했건만…

오늘은 그냥 가볍게 발생한 문제에 대한 의문만 남겨본다.

하드웨어 보완

지난 번 부품을 얼키설키 연결을 시켜놓고 모양 잘나왔다고(?) 자아도취에 빠져 이리 저리 둘러보던 중…
아뿔싸…스위치가 없었다…ㅠ.ㅠ

다행이 예전에 미리 잔뜩 사다놓은 푸시락 버튼이 있어 주섬주섬 찾아다가 드론 프레임의 앞자리, 카메라 장치하는
공간에 끼워봤더니 얼추 잘 어울린다 싶어 연결을 하였다. 이것으로써 정말 하드웨어 조립은 끝을 맺게 되었다.
다만 드론이 구동을 안할 시 그 원인이 하드웨어쪽에 있다면…망한거다…ㅠ.ㅠ

 

테스트

그리고 이제 스케치 코드를 작성하고 테스트를 해볼 시간이다.
코드는 매우 간단하게 일반적으로 DC모터 드라이버를 사용하는 예제를 가져왔다.
코드는 다음과 같다.

 

void setup() {
  // 모터를 출력모드로 설정
  pinMode(3, OUTPUT);              // 3번핀을 출력모드로 설정합니다.
  pinMode(5, OUTPUT);              // 5번핀을 출력모드로 설정합니다.
  pinMode(6, OUTPUT);              // 6번핀을 출력모드로 설정합니다.
  pinMode(9, OUTPUT);              // 9번핀을 출력모드로 설정합니다.
}

void loop() {
  // 모터 돌리기
  analogWrite(3, 150);                   
  analogWrite(5, 150);              
  analogWrite(6, 150);                  
  analogWrite(9, 150);          
  delay(3000);           
  // 모터 정지         
  analogWrite(3, 0);             
  analogWrite(5, 0);                 
  analogWrite(6, 0);            
  analogWrite(9, 0);              
  delay(3000);                         
}

 

간단하게 모터의 동작만 테스트하는 아주 간단한 코드이다. 원래 MPU9250과 nRF24L01 예제 코드에 추가하여 테스트
하려고 했는데 뭔가 잘 안되는 것 같아 모터만 따로 테스트해보기로 했다.

하지만…그래도 잘 안된다….ㅠ.ㅠ


일단 delay 시간에 맞춰서 모터 드라이버에 LED도 불이 들어오고 전류가 흐르는 소리가 찌르르 나긴 하는데 정작 모터가 
돌아가지 않는다. 모터 드라이버가 전류를 잘 공급해주지 못하는 것일까? 아는 것이 없으니 어디를 의심해봐야 할지도
모르겠다…ㅠ.ㅠ 일단 증상은 아래의 영상과 같다.

 

 

 

그리고 실제 부품들과는 다르지만 회로 구성도도 함께 올려본다. 이 회로도는 미니 드론 만들기 작업을 처음 포스팅
할 때 올렸던 그림이다.

 

정리

오늘은 모터 구동 테스트를 진행해보았다. 하지만 결과는 썩 좋지 않았다. 이제부터의 과제는 과연 무엇이 문제의
원인인지를 찾아내는 것이다. 때문에 다음 주 주말에는 현재 부품이 아닌 다른 부품 (아두이노 프로 미니와 다른
DC모터 드라이버, 그리고 다른 모터들)을 이용하여 회로를 구성하고 정상적으로 구동이 되는지 확인을 해봐야겠다.

사실 현재 드론에 사용중인 Racerstar의 8520 코어리스 모터를 한 달 전에 banggood.com에서 추가로 주문을 
해놓았는데 무슨 일인지 배송이 안되다가 겨우 며칠 전에 선적되었다는 것을 확인할 수 있었다. 만일 새로 구성한 회로가 
잘 작동을 하고 새 모터가 무사히 도착을 한다면 기존 작업한 것을 버리고 새 회로와 모터 그리고 프레임도 새로 만들어
다시 시작을 해야겠다. (역시 정상 동작을 확인하고 납땜을 했어야 했는데…ㅠ.ㅠ)

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

자영이는 전거를 타면서 본 화 야기입니다.
말 그대로 실내 자전거로 운동하면서 지루함을 달래기 위해 아이패드로 본 영화에 대해 극히 
주관적으로 아무런 논리적 분석 없이 의식의 흐름에 따라 적어 내려간 초 간단 감상문임을
참고해주세요.



원제 : Resident Evil: Retribution
상영 : 2012년
장르 : 액션, SF, 공포, 스릴러
감독 : 폴 앤더슨
출연 : 밀라 요보비치
시청 : 넷플릭스
개인 평점 : ★


음…내가 웬만하면 결말은 봐주는데…역시나 너무 가리지 않고 영화를 봐서 그런가…드디어 차마 끝까지 보지 못할
영화가 나타났다…


대체로 게임을 기반으로 한 영화가 쫄망하기 일쑤인데 그래도 시리즈가 6편이나 나왔다는 것은 나름 엄청난 성공을
거둔 것이라 할 수 있다. 뭐 제대로 본 것이 없어 평가할 것도 없지만 아마도 밀라 요보비치의 시원한 액션이 중요한
역할을 했을 것이라 추측해본다.


그런데…
이건 시원하다 못해 냉골을 만들어버렸네…
그래도 적들과 총격전을 하면 좀 숨는 시늉도 하고 그래야 하는 것 아냐?
이놈이고 저놈이고 도대체 뻣뻣이 서서 그냥 쏴대는 것은 어느 부대에서 배운 건지…
아무리 영화적 허용이라 하더라도 적들은 볏단처럼 쓰러져가고 주인공은 보호막이라도 둘러쳐진 듯 상처하나 없는 것은
내가 본 영화 중 가장 심했다…


차라리 게임이 더 현실적이고 긴장감 넘치는데…최근 플스4로 출시된 레지던트 이블 2 : RE를 하는 것이 백번 나을 듯…
내가 왜 이런 영화에 대한 글을 쓰고 있는지도 한심하네…
진짜 모든 것이 끝났으면 좋겠다…-.-


끝!

블로그 이미지

마즈다

이미 마흔을 넘어섰지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^