[글쓴이:] cooler8

  • 파이썬 소수점 오차

    소수점 오차의 개념을 이해하기 위해 간단한 예를 들어 보겠습니다. 이 예에서는 부동소수점 수를 사용하여 덧셈과 나눗셈을 수행하는 상황을 보여줍니다.

    예제: 소수점 오차의 발생

    1. 기본적인 부동소수점 표현

    컴퓨터는 실수를 이진수로 표현합니다. 예를 들어, 0.1은 이진수로 정확히 표현할 수 없습니다. 따라서, 소수점 아래의 숫자가 근사값으로 저장됩니다.

    • 0.1의 이진 표현: 0.1은 이진 부동소수점으로 표현할 때 근사값으로 저장됩니다.

    2. 덧셈 예제

    # Python에서의 예
    a = 0.1
    b = 0.2
    result = a + b
    
    print(result)  # 출력: 0.30000000000000004
    
    
    • 예상 결과: 0.3
    • 실제 결과: 0.30000000000000004
    • 설명: 0.1과 0.2를 더한 결과는 이진수로 정확히 표현할 수 없기 때문에 소수점 아래에서 약간의 오차가 발생합니다.

    3. 나눗셈 예제

    # Python에서의 예
    c = 1.0
    d = 3.0
    result_div = c / d
    
    print(result_div)  # 출력: 0.3333333333333333
    
    
    • 예상 결과: 0.33333333…
    • 실제 결과: 0.3333333333333333 (근사값)
    • 설명: 1을 3으로 나누면 정확히 0.333…이 되지만, 이 값도 이진수로 표현할 수 없어서 근사값으로 저장됩니다.

    소수점 오차의 영향

    소수점 오차는 특히 반복적인 계산이나 큰 숫자 간의 연산에서 누적될 수 있습니다. 예를 들어, 다음과 같은 경우를 생각해 볼 수 있습니다:

    반복 계산 예제

    sum_value = 0.0
    for _ in range(10):
        sum_value += 0.1
    
    print(sum_value)  # 출력: 0.9999999999999999
    
    
    • 예상 결과: 1.0
    • 실제 결과: 0.9999999999999999
    • 설명: 0.1을 10번 더했지만, 각 덧셈에서 소수점 오차가 누적되어 최종 결과가 1.0이 아닌 0.999…로 나옵니다.

    요약

    • 소수점 오차는 부동소수점 수의 근사 표현으로 인해 발생합니다.
    • 덧셈과 나눗셈에서 오차가 발생할 수 있으며, 반복적인 계산에서 누적되어 더 큰 문제가 될 수 있습니다.
    • 이러한 오차는 신경망 학습과 같은 정밀한 계산이 필요한 상황에서 주의해야 할 요소입니다.

    [1] velog – 컴퓨터에서의 실수 표현 (https://velog.io/@yuseogi0218/컴퓨터에서의-실수-표현) [2] 윤자이 기술블로그 – [Tech] IEEE754 부동 소수점(Floating Pointing) – 윤자이 기술블로그 (https://ooeunz.tistory.com/98) [3] ahnjg.tistory.com – 컴퓨터에서 실수의 표현 (Fixed Point, Floating Point, Single Precision … (https://ahnjg.tistory.com/16) [4] 티스토리 – [iOS] – 소수점 x자리 아래로 자르는 방법 – 후리스콜링개발 (https://roniruny.tistory.com/97) [5] 티스토리 – 엑셀 자동 소수점 표기 – 엑셀을 파헤쳐 보자! – 티스토리 (https://excelys.tistory.com/44) [6] 캐드(CAD) 정보의 중심 – 치수 소수점 관련한 리습 질문합니다 – 고캐드 – 캐드(CAD) 정보의 중심 (https://www.gocad.co.kr/question/치수-소수점-관련한-리습-질문합니다/) [7] Medium – 프로그래밍에서 정확한 소수점 계산은 어떻게 할까? (https://medium.com/@pranne1224/프로그래밍에서-정확한-소수점-계산은-어떻게-할까-2a61fa60e002) [8] blog.naver.com – 소수 (prime number) : 네이버 블로그 (https://blog.naver.com/badang25/220620484764) [9] ammff.tistory.com – [자바] 소수점 특정 자리수까지만 표시하기 (https://ammff.tistory.com/44) [10] blog.naver.com – ToString 에 숫자 포멧 지정해서 숫자를 문자열로 변환하기(소수점 지정) (https://blog.naver.com/hileejaeho/221755424677?viewType=pc)

    소수점 오차는 정규화 과정에서 계산되는 값에 영향을 줄 수 있습니다. 특히, 머신러닝 모델의 학습 과정에서 이러한 오차가 누적되거나 특정 계산에 영향을 미치면, 모델의 성능과 결과에 부정적인 영향을 미칠 수 있습니다. 다음은 소수점 오차가 정규화에 미치는 영향을 설명하는 몇 가지 포인트입니다.

    1. 정규화 과정에서의 오차

    정규화 과정에서 각 픽셀 값을 255로 나누어 0-1 범위로 변환할 때, 소수점 오차가 발생할 수 있습니다. 예를 들어:

    • 픽셀 값이 1일 때: $$ \text{정규화 후} = \frac{1}{255} \approx 0.00392156862745098 $$
    • 이 값은 저장 과정에서 근사값으로 표현되기 때문에, 약간의 오차가 발생할 수 있습니다.

    2. 누적 오차

    훈련 데이터가 많아지면, 각 데이터 포인트의 정규화된 값들이 누적되어 전체 모델에 영향을 줄 수 있습니다. 예를 들어, 많은 이미지에서 정규화된 값들이 소수점 오차로 인해 불균형하게 저장된다면, 모델이 특정 패턴을 학습하는 데 방해가 될 수 있습니다.

    3. 모델의 민감도

    일부 모델은 입력 데이터의 변화에 매우 민감합니다. 소수점 오차가 모델의 입력에 영향을 미치면, 다음과 같은 문제가 발생할 수 있습니다:

    • 학습 불안정성: 모델이 잘못된 입력을 학습하게 되어, 전반적인 성능이 저하될 수 있습니다.
    • 정확도 감소: 잘못된 값으로 인해 예측 결과가 부정확해질 수 있습니다.

    4. 대처 방법

    소수점 오차의 영향을 최소화하기 위해 몇 가지 방법을 사용할 수 있습니다:

    • 정밀도 높은 데이터 타입 사용: 필요한 경우 32비트 대신 64비트 부동소수점 타입을 사용하여 정밀도를 높일 수 있습니다.
    • 정규화 범위 조정: 데이터의 범위를 조정하여 소수점 계산의 영향을 줄이거나, 정규화를 통해 불필요한 정보를 제거할 수 있습니다.
    • 데이터 전처리 최적화: 데이터 전처리 과정에서 소수점 오차를 줄이기 위해 다양한 기법을 사용할 수 있습니다.

    요약

    • 소수점 오차는 정규화 과정에서 발생할 수 있으며, 이는 머신러닝 모델의 학습과 성능에 영향을 미칠 수 있습니다.
    • 이러한 문제를 해결하기 위해 정밀도 높은 데이터 타입 사용, 정규화 범위 조정 등 다양한 방법을 사용할 수 있습니다.

    [1] 티스토리 – 오차항(error) vs 잔차(residual) – 사고의 과정 – 티스토리 (https://thought-process-ing.tistory.com/30) [2] 티스토리 – 실험 오차 계산식. percent error formula – 좋은 습관 – 티스토리 (https://ywpop.tistory.com/7882) [3] 티스토리 – [밑시딥 1] CHAPTER 5 오차역전파법 – 공부하는 무니 – 티스토리 (https://muni-dev.tistory.com/entry/밑시딥-1-CHAPTER-5-오차역전파법) [4] 5l.co.kr – 자동차세 계산기 (http://5l.co.kr/tax/) [5] 시험/실험자료 레포트 – 카페인의_추출과_분리(예비+결과보고서) – 시험/실험자료 레포트 (http://www.jisikworld.com/report-view/582232) [6] MathWorks – MATLAB normpdf – 정규 확률 밀도 함수 (https://kr.mathworks.com/help/stats/normpdf.html) [7] [정보통신기술용어해설] – 에러함수 (http://www.ktword.co.kr/test/view/view.php?no=4404) [8] 티스토리 – #4-(2) 오차역전파법 : 역전파 및 예시 – Broccoli’s House (https://kolikim.tistory.com/46) [9] 티스토리 – [통계] 중심극한정리, Central Limit Theorem (CLT) 의 정의 (https://bpapa.tistory.com/35) [10] 네이버 블로그 – 확률과 통계 6. 연속확률변수, 정규분포 – 네이버 블로그 (https://m.blog.naver.com/ssooj/222365335246)