TensorFlow рдкрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рд▓реЗрд╡реЗрдирдмрд░реНрдЧ-рдорд╛рд░реНрдХреНрд╡рд░реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдпрд╣ рдПрдХ TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИред рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛ рдорд╛рдиреЗрдВред рдпрд╣ рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдЧрдгрд┐рдд рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдПред рдпрд╛рджред рдХреЛрдИ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕рдмреВрдд рдФрд░ рдЬрдЯрд┐рд▓ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреЗрд╡рд▓ рд╕рд╣рдЬ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдиреНрдпреВрдирддрдоред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдПрдХ рдЫреЛрдЯреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреИрд╕реЗ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред




рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдореБрдЭреЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдЙрдирдХреА рдХрдВрдкрдиреА рднреВрднреМрддрд┐рдХреАрдп рдорд╛рдкрди рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреА рд╣реИред рдбреНрд░рд┐рд▓рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рдВрдЪ рдХреБрдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВред рдХреБрдЫ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рднреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдХреЗрддреЛрдВ рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕рдЯреАрдХ рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдФрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдорд╛рдк рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдХрдИ рд╕реМ рд╣рдЬрд╛рд░ рдорд╛рдорд▓реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдЙрди рдкрд░ рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рдЪреВрдВрдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмрд╣реБрдд рддреЗрдЬ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдорд╛рдкрд╛ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, рдбреНрд░рд┐рд▓рд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╣реА рд╣реИрдВред рд╡рд┐рд╡рд░рдг рд▓реЗрдЦ рдореЗрдВ рд╣реИрдВ:


рдХреБрд╢рдирд┐рд░, рдбреАред, рд╡реЗрд▓рдХрд░, рдПрдиред, рдмреЛрдВрдбрд╛рд░реЗрдВрдХреЛ, рдПред, рдбрд╛рдпрдЯрд▓реЛрд╡, рдЬреАред, рдФрд░ рджрд╛рд╕рд╣реЗрд╡рд╕реНрдХреА, рд╡рд╛рдИред (2018, 29 рдЕрдХреНрдЯреВрдмрд░)ред рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ (рд░реВрд╕реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 2 рдбреА рдлреЙрд▓реНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдбреАрдк рдЕрдЬреАрдореБрдерд▓ рдкреНрд░рддрд┐рд░реЛрдзрдХрддрд╛ рдЙрдкрдХрд░рдг рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕рд┐рдореБрд▓реЗрд╢рдиред рдкреЗрдЯреНрд░реЛрд▓рд┐рдпрдо рдЗрдВрдЬреАрдирд┐рдпрд░реНрд╕ рдХрд╛ рд╕рдорд╛рдЬред doi: 10.2118 / 192573-RU


рдПрдХ рд╢рд╛рдо, рдореИрдВрдиреЗ рджрд┐рдЦрд╛рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдХреЗрд░ рдПрдХ рд╕рд░рд▓ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд╛рдо рдкрд░ рдПрдХ рдорд┐рддреНрд░ рдиреЗ рдЧрд┐рдиреЗ рд╣реБрдП рдбреЗрдЯрд╛ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдЪрд░реНрдЪрд╛ рдХреАред рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╡рд╣ рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рджреЛрд╕реНрдд рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдФрд░ рдЕрдЧрд░ рдФрд╕рдд рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐ 1 рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реЛ рдЧрдИ, рддреЛ 1e-3 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред 3 рдЖрджреЗрд╢ рдХрдоред рдПрдХ рд╣рдЬрд╛рд░ рдмрд╛рд░ред


рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рдбреЗрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг, рдФрд░ рдЕрдиреБрдХреВрд▓рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдмрд╛рдж, рдПрдХ рджреЛрд╕реНрдд рдиреЗ рдлреЛрди рдХрд┐рдпрд╛ рдФрд░ рдХрд╣рд╛ рдХрд┐ рдЙрд╕рдиреЗ рдорд╛рдЯрд▓реИрдм рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд▓реЗрд╡реЗрдирдмрд░реНрдЧ-рдорд╛рд░реНрдХреНрд╡рд╛рд░реНрдб рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ (рдЗрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдПрд▓рдПрдо рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ)ред рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп (рдХрдИ рджрд┐рдиреЛрдВ) рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ GPU рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рдерд╛ред рдпрд╣ рдПрдХ рдЪреБрдиреМрддреА рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред


рдХреИрд░рд╕ рдпрд╛ рдЯреЗрдВрд╕реЙрд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрд▓рдПрдо рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдХреА рдПрдХ рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рд╡рд┐рдлрд▓ рд░рд╣реАред рдореИрдВ рдХреЗрд╡рд▓ рдкрд╛рдЗрд░рди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЖрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореБрдЭреЗ рдЦрд░рд╛рдм рд▓рдЧ рд░рд╣реА рдереАред рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рджреЛ рд╢рд╛рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдереАрдВред рдЗрд╕рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрд╛ред рджреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ:


  1. TensorFlowред рд▓реЗрдЦреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣, рд▓реЗрдХрд┐рди рд▓рдЧрднрдЧ рд╕рднреА рд╕реНрддрд░реЛрдВ "рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╣реИрд▓реЛ рд╡рд┐рд╢реНрд╡ рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд рдЕрдВрдХ рдорд╛рдиреНрдпрддрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВред"
  2. рдЧрдгрд┐рддред рдореИрдВ рдмрд╣реБрдд рдХреБрдЫ рднреВрд▓ рдЧрдпрд╛, рдФрд░ рдЧрдгрд┐рддреАрдп рд▓реЗрдЦреЛрдВ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ рдореЗрд░реЗ рдЬреИрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ: рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдареЛрд╕ рд╕реВрддреНрд░, "рдЬрд╛рд╣рд┐рд░ рд╣реИ!" рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдирддреАрдЬрддрди, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрд╛ рдЬреЛ рдЧрдгрд┐рдд рднреВрд▓ рдЧрдП рдФрд░ рдЯреЗрдВрд╕реЛрд░рдлреНрд▓реЛ рдХреЛ рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдЯреНрдЯрд░ рдХреЗ рдмрд┐рдирд╛ред рд▓реЗрдЦ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкрд╛рда рдФрд░ рдЫреЛрдЯреЗ рдХреЛрдб рд╣реИрдВред рд╡рд┐рдкрд░реАрдд рд╡рд┐рдХрд▓реНрдк, рдЬрдм рдереЛрдбрд╝рд╛ рдкрд╛рда рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рд▓реАрд╡реЗрдирдмрд░реНрдЧ-рдорд╛рд░реНрдХреНрд╡рд╛рд░реНрдб рд╣реИ ред


рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬрд╛рдирд┐рдП


рд╣рдо рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдЕрдиреБрдХреВрд▓рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


f ( x , y ) = ( a - x ) 2 + b ( y - x 2 ) 2




рд╡рд╣ рдЕрдЪреНрдЫреА рдХреНрдпреЛрдВ рд╣реИ?


  • рд╕реБрдВрджрд░ рдЕрдиреБрд╕реВрдЪреАред рдЗрд╕реЗ рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рд╡реИрд▓реА рдФрд░ рдЕрдирдЯреНрд░рд╛рдВрд╕рдмрд▓ рд░реЛрд╕реЗрдирдмреНрд░реЛрдХ рдХреА рдХреЗрд▓рд╛ рдлрдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╡реИрд╢реНрд╡рд┐рдХ рдиреНрдпреВрдирддрдо рд▓рдВрдмреА, рд╕рдВрдХреАрд░реНрдг, рдкрд░рд╡рд▓рдпрд┐рдХ рд╕рдорддрд▓ рдШрд╛рдЯреА рдХреЗ рдЕрдВрджрд░ рд╣реИред рдПрдХ рдШрд╛рдЯреА рдвреВрдБрдврдирд╛ рддреБрдЪреНрдЫ рд╣реИ, рдФрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдиреНрдпреВрдирддрдо рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
  • рдПрдХ рдмрд╣реБрдЖрдпрд╛рдореА рд╡рд┐рдХрд▓реНрдк рд╣реИред рдХрдИ рдЪрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ:


import numpy as np import tensorflow as tf import math def rosenbrock(x, y, a, b): return (a - x)**2 + b*(y - x**2)**2 

рд╣рдо рд╕рдорд╕реНрдпрд╛ рдмрддрд╛рддреЗ рд╣реИрдВ


рдЬрдм рд╕реЗ рд╣рдо рдПрдХ рдорд╛рдкрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рд╣рдо рд╕рд╛рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЙрдкрдХрд░рдг рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдорд╛рдк рд╕рдХрддрд╛ рд╣реИ ( x , y ) рдФрд░ рдКрдВрдЪрд╛рдИ z ред рднреМрддрд┐рдХрд╡рд┐рджреЛрдВ рдиреЗ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рдХрд╣рд╛: " рд╣рд╛рдВ, рдпрд╣ рд░реЛрд╕реЗрдирдмреНрд░реЛрдХ рд╣реИ! рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдКрдВрдЪрд╛рдИ рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред " рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдиреЗ рд╣рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рджрд┐рдпрд╛ рдЬреЗрдб = рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ рд╣ 'рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ рдм реН рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ реБ рдХ ( рдП рдХ реН ' рдореЙрдбреНрдпреВрд▓ рдЬреЛрдбрд╝реЗрдВ , рд╡ рд╛ рдИ , рдП , рдм реА ) рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ ( рдП , рдм реА ) ред рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд┐рд░ рд╣реИрдВ, рдЕрдЬреНрдЮрд╛рдд рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдвреВрдВрдврдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред


рд╣рдордиреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрдпреЛрдЬрд┐рдд рдХреА, рдЬреЛ рджрд┐рдП рдЧрдП рдП рдПрдо рдЕрдВрдХ (x1,y1,z1),(x2,y2,z2),...,(xm,ym,zm) :


 # (2.5, 2.5) -   ,  ,     data_points = np.array([[x, y, rosenbrock(x, y, 2.5, 2.5)] for x in np.arange(-2, 2.1, 2) for y in np.arange(-2, 2.1, 2)]) m = data_points.shape[0] 

рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдФрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╣реИред рд╣рдо Numpy рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


 x, y = data_points[:, 0], data_points[:, 1] z = data_points[:, 2] #   =5  b=5? a_guess, b_guess = 5., 5. #  -hat   ,   , #   ,   ,   .   #     ^   - # .    hat. z_hat = rosenbrock(x, y, a_guess, b_guess) 

рдХреИрд╕реЗ рд╕рдордЭреЗрдВ рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рдЧрд▓рдд рд╣реИрдВ? рдЕрд╡рд╢рд┐рд╖реНрдЯреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ - рддреНрд░реБрдЯрд┐ рдЖрдХрд╛рд░ред рдПрдо рдЕрдВрдХ рджреЗрддреЗ рд╣реИрдВ рдПрдо рдЕрд╡рд╢рд┐рд╖реНрдЯ - рдЖрдкрдХреЛ рдПрдХ рдЕрднрд┐рдиреНрди рд╕рдВрдХреЗрддрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдФрд╕рдд рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:


MSE(a,b)= frac1m summi=1(ziтИТ widehatzi)2


рдирд┐рдХрдЯрддрд╛ рдХреЗ рдЗрд╕ рдорд╛рдк рдХреЛ рдорд╛рдзреНрдп рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ mse рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ):


 # r - residuals () r = z - z_hat # mse loss = np.mean(r**2) print(loss) 

 [Out]: 3868.2291666666665 

рдиреНрдпреВрдирддрдо рдХреЛ рдХрдо рдХрд░рдХреЗ , рд╣рдо рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ ( рдЧреИрд░-рд╡рд░реНрдЧ рд╡рд░реНрдЧ рдиреНрдпреВрдирддрдо ):



рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдерд╛ред


рд╣рдо TensorFlow рдкрд░ рд╕рдорд╕реНрдпрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ


рдореЙрдбрд▓ рдХрд╛ рд░реВрдк рд╣реИ z=рд░реЛрд╕рдмреНрд░реБрдХ(рдПрдХреНрд╕,рд╡рд╛рдИ,рдП,рдмреА) ред рд╣рдо рдЗрд╕реЗ рдлреЙрд░реНрдо рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ y=f(x,p) (рдЖрдорддреМрд░ рдкрд░ рдореИрдереНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ  рдмреАрдЯрд╛ рдХреЗ рдмрдЬрд╛рдп рдкреА рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмреАрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред рдЕрдм рдореЙрдбрд▓ рдХрд╛ рд░реВрдк рд╣реИ y=рд░реЛрд╕реЗрдирдмреНрд░реЛрдХ(рдПрдХреНрд╕,рдкреА) рдЬрд╣рд╛рдБ рдп - рдКрдВрдЪрд╛рдИ x рджреЛ рддрддреНрд╡реЛрдВ (рдШрдЯрдХ), рдФрд░ рдХрд╛ рд╕рдордиреНрд╡рдп рд╡реЗрдХреНрдЯрд░ рд╣реИ рдкреА - рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡реЗрдХреНрдЯрд░ ред


рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдХреНрд╕рд░ рд╡реИрдХреНрдЯрд░ рдХреЛ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдзрди рд╣реИред рдЖрдк рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЖрдпрд╛рдо рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдПрди , рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА 1 Nрдмрд╛рд░ , рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд░рдгреА рдПрди 1 рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рдПрдХ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдЧреБрдгрд╛ рдХрд░рдирд╛) рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:


 startbmatrixx1 vdotsxN endbmatrix


TensorFlow рдЯреЗрдВрд╕рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЯреЗрдВрд╕рд░ , рдПрдХ рд╕рд░рдгреА рдХреА рддрд░рд╣, рдПрдХ рдЖрдпрд╛рдореА (рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рджреЛ-рдЖрдпрд╛рдореА (рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдпрд╛ рд╕реНрддрдВрдн рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП ) рдФрд░ рдХрд┐рд╕реА рднреА рдмрдбрд╝реЗ рдЖрдпрд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


 #    ('placeholder' ,    #      ) x = tf.placeholder(tf.float64, shape=[m, 2]) y = tf.placeholder(tf.float64, shape=[m]) #   ('variable' ,    ) #     (5, 5) p = tf.Variable([5., 5.], dtype=tf.float64) #  y_hat = rosenbrock(x[:, 0], x[:, 1], p[0], p[1]) #  r = y - y_hat # mse (mean squared error) loss = tf.reduce_mean(r**2) 

TensorFlow рдХреЛрдб Numpy рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред рд╕рд╛рдордЧреНрд░реА рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред Numpy рдХреЛрдб mse рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ ред TensorFlow рдХреЛрдб рдХрд┐рд╕реА рднреА рдЧрдгрдирд╛ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ mse рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ ред рдПрдХ рдмрд╣реБрдд рджрд┐рдорд╛рдЧ- рд╕рд╣рдирд╢реАрд▓ рдХреНрд╖рдг рд░реЛрд╕рдмреНрд░реБрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдХрд╛рдо рд╣реИред рд╣рдо рдЗрд╕реЗ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо Numpy рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЬрдм рд╣рдо рдЯреЗрдВрд╕рд░реЛрдВ рдХреЛ TensorFlow рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХрд╛ рдПрдХ рд╕рдмрдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЯреЗрдВрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рдмрдврд╝рдд рджреЗрддрд╛ рд╣реИред рдмрд╣реБрд░реВрдкрддрд╛ рдХреЗ рдЪрдорддреНрдХрд╛рд░, рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВ:



рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдл рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, TensorFlow рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ ( рд░рд┐рд╡рд░реНрд╕ рдореЛрдб рд╕реНрд╡рдд: рднрд┐рдиреНрди рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред


рдЧрдгрд┐рдд рдХрд╛ рдПрдХ рдХреНрд╖рдгред рдмреНрд▓реЙрдХ "рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рднреВрд▓ рдЧрдП рд╣реИрдВ" рдПрдХ рд╕реНрдкреЙрдЗрд▓рд░ рдореЗрдВ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рд╡реНрдпреБрддреНрдкрдиреНрди (рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ - рд╕рдВрдЦреНрдпрд╛ рд╢реЗрд╖)

рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕реНрдХреЗрд▓рд░ рдХреЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдпрд╛рдж рд╣реИ (рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрдирд╛) рдПрдХ рдЪрд░ рдХрд╛ рдХрд╛рд░реНрдп: рдХреЗ рд▓рд┐рдП f: mathbbR rightarrow mathbbR рдпреМрдЧрд┐рдХ рдЪ рдмрд┐рдВрджреБ рдкрд░ x in mathbbR рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд:


fтА▓(x)= limh to0 fracf(x+h)тИТf(x)h


рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡реНрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдорд╛рдкрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред рд╕реНрдХреЗрд▓рд░ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реНрдпреБрддреНрдкрдиреНрди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рддрдирд╛ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдЪ рдЕрдЧрд░ x рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди  varepsilon :


f(x+ varepsilon) рд▓рдЧрднрдЧf(x)+ varepsilonfтА▓(x)


рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдп=рдЪ(x) , рдФрд░ рд╡реНрдпреБрддреНрдкрдиреНрди рдп рдкрд░ x рд╣рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ  frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx ред рдРрд╕рд╛ рд░рд┐рдХреЙрд░реНрдб рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ  frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx - рдЪрд░ рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рджрд░ x рдФрд░ рдп ред рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ x рдХреЛ рдмрджрд▓реЛ  varepsilon рддреЛ рдп рд▓рдЧрднрдЧ рдмрджрд▓ рдЬрд╛рдирд╛  varepsilon frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx ред рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


x rightarrowx+ Deltax Rightarrowy rightarrow рд▓рдЧрднрдЧy+ frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx Deltax


рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ: "рдмрджрд▓ рд░рд╣рд╛ рд╣реИ x рдкрд░ x+ Deltax рдкрд░рд┐рд╡рд░реНрддрди рдп рд▓рдЧрднрдЧ y+ Deltax frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx "рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмреАрдЪ рдХреА рдХрдбрд╝реА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ x рдФрд░ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдп ред


рд╣рдордиреЗ рдПрдХ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рдЧреНрд░рд╛рдл рдмрдирд╛рдпрд╛ рд╣реИ, рдЪрд▓реЛ рдЧрдгрдирд╛ рдЧрдгрдирд╛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:


 #        #      placeholder (  ) feed_dict = {x: data_points[:,0:2], y: data_points[:,2]} #       TensorFlow session = tf.Session() #     session.run(tf.global_variables_initializer()) #   ()  loss (mse) current_loss = session.run(loss, feed_dict) print(current_loss) 

 [Out]: 3868.2291666666665 

рдирддреАрдЬрд╛ рдиреЗрдореНрдкреА рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рд╣реИред рдЗрд╕рд▓рд┐рдП рдЙрдирд╕реЗ рдЧрд▓рддреА рдирд╣реАрдВ рд╣реБрдИред


рдЕрдиреБрдХреВрд▓рди рд╢реБрд░реВ рдХрд░реЗрдВ


рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдо:


  1. рд╣рдо рдЗрд╖реНрдЯрддрдо рдорд╛рдирджрдВрдб рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдиреНрдпреВрдирддрдо рдореВрд▓реНрдпред
  2. рдЪрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ: рд╡реЗрдХреНрдЯрд░ рдкреА рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ ред рдм рд░реЛрд╕реЗрдирдмреНрд░рдХ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
  3. рд╣рдордиреЗ рдЕрднреА рддрдХ рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВред

рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рд╣рдордиреЗ рдПрдХ рдкрд░рд┐рдорд┐рдд рд╣рд╛рдирд┐ рдЯреЗрдВрд╕рд░ ( рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди ) рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдЧреНрд░рд╛рдл рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдЕрдиреБрдХреВрд▓рди рдХрд╛ рд▓рдХреНрд╖реНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЦреЛрдЬрдирд╛ рд╣реИ рдкреА рдЬрд┐рд╕ рдкрд░ рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореВрд▓реНрдп рдиреНрдпреВрдирддрдо рд╣реИред рд╣рдо рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ, рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХрд╛ рдЧреНрд░рд╛рдл рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ (рдЕрд╡рддрд▓ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдореАрдирд┐рдорд╛ рдХреЗ рдмрд┐рдирд╛):



рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЪрдХреНрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


 # :   mse,   ,  #   mse,        placeholder def train(target_loss, max_steps, loss_tensor, train_step_op, inputs): step = 0 current_loss = session.run(loss_tensor, inputs) #           while current_loss > target_loss and step < max_steps: step += 1 #    1, 2, 4, 8, 16...  if math.log(step, 2).is_integer(): print(f'step: {step}, current loss: {current_loss}') #    session.run(train_step_op, inputs) current_loss = session.run(loss_tensor, inputs) print(f'ENDED ON STEP: {step}, FINAL LOSS: {current_loss}') 

рд╣рдо рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдврд╛рд▓ рдбрд┐рд╕реЗрдВрдЯ (SGD) рдХреА рд╡рд┐рдзрд┐ рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдПрдХ рд╕рд╛рд╣рд╕реА рд╕реНрдХреАрдпрд░ рдХреА рд╕рд╡рд╛рд░реА рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдврд▓рд╛рди (рд╕рдмрд╕реЗ рд╕реНрдерд┐рд░ рджрд┐рд╢рд╛ рдореЗрдВ) рдХреЛ рдиреАрдЪреЗ рд░рдЦрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рди рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдХреЗрд╡рд▓ рдврд▓рд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдЧрд░ рдврд▓рд╛рди рдордЬрдмреВрдд рд╣реИ, рддреЛ рд╕реНрдХреАрдпрд░ рдЕрдЧрд▓реЗ рдмрджрд▓рд╛рд╡ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд▓рдВрдмреА рджреВрд░реА рдХреА рдЙрдбрд╝рд╛рди рднрд░рддрд╛ рд╣реИред рдХрдордЬреЛрд░ рдврд▓рд╛рди рдХреЗ рд╕рд╛рде, рдпрд╣ рдЫреЛрдЯреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЙрдбрд╝рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ ( рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рд┐рдЪрд▓рди ), рдФрд░ рдПрдХ рдЧрдбреНрдвреЗ ( рд╕реНрдерд╛рдиреАрдп рдиреНрдпреВрдирддрдо ) рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддреЗ рд╣реИрдВред



рдЖрдк рдЗрд╕ рдкреНрд░рдХрд╛рд░ (рдкрд░рд┐рд╡рд░реНрддрди) рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ  boldsymbolp рдкрд░  рд╕реБрдирд╛рд░pтИТ... ):


\ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ред рд╕реБрдирд╣рд░рд╛ $ {рд╕реБрдирд╛рд░ {{}} рджрд╛рдпрд╛рдБ рднреМрдВрд░рд╛ \ _ \


рдлреИрдЯреА  boldsymbolp рдЬреЛрд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд╛рди рдХрд╛ рдмрд┐рдВрджреБ рд╣реИ - рд╡рд░реНрддрдорд╛рди рдХрджрдо рдкрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рдореВрд▓реНрдпред рдкрд╣рд▓реЗ рдХрджрдо рдкрд░, рдпрд╣ рд╣рдорд╛рд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ (5, 5)ред рд╕реВрддреНрд░ рдореЗрдВ рджреЛ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рд╣реИрдВ:  рдЕрд▓реНрдлрд╛ - рд╕реАрдЦрдиреЗ рдХреА рджрд░ ( рд╕реАрдЦрдиреЗ рдХреА рджрд░ ),  nablapрд╣рд╛рдирд┐ - рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдиреБрдХрд╕рд╛рди рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдврд╛рд▓ ( рдврд╛рд▓ )ред



рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ (рд╡реЗрдХреНрдЯрд░ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдирдВрдмрд░ рдмрд╛рдИрдВ рдУрд░)

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдХреЗрд▓рд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ: f: mathbbRN rightarrow mathbbR ред рдпреМрдЧрд┐рдХ рдЪ рдмрд┐рдВрджреБ рдкрд░ x in mathbbRN рдЕрдм рдПрдХ рдврд╛рд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реИ [ nablaxf(x)]in mathbbRN ("рдирд╛рдмрд▓рд╛" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛) рдЖрдВрд╢рд┐рдХ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реЗ рдмрдирд╛:


 nablaxy=( frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx1, frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx2,..., frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХxN)


рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рддрд░реНрдХ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:


x rightarrowx+ Deltax Rightarrowy rightarrow рд▓рдЧрднрдЧy+ nablaxy cdot Deltax


рдЙрд╕ рдЦрд╛рддреЗ рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдб рдХрд╛рдлреА рдмрджрд▓ рдЧрдпрд╛ рд╣реИ x ред  Deltax рдФрд░  nablaxy - рд╡реИрдХреНрдЯрд░ рдореЗрдВ  mathbbRN , рдФрд░ рдп - рд╕реНрдХреЗрд▓рд░ред рдЬрдм рдХрдИ рдЧреБрдгрд╛ рд╡реИрдХреНрдЯрд░  nablaxy рдФрд░  Deltax рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдШрдЯрдХреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдпреЛрдЧ)ред


 #        grad = tf.gradients(loss, p)[0] #   learning_rate = 0.0005 #   ,     apply_gradients - #         opt = tf.train.GradientDescentOptimizer(learning_rate=1) #           sgd = opt.apply_gradients([(learning_rate*grad, p)]) #   ,    40000  session.run(tf.global_variables_initializer()) train(1e-10, 40000, loss, sgd, feed_dict) print('PARAMETERS:', session.run(p)) 

 [Out]: step: 1, current loss: 3868.2291666666665 step: 2, current loss: 1381.5379689135807 [...] ENDED ON STEP: 582, FINAL LOSS: 9.698531012270816e-11 PARAMETERS: [2.50000205 2.49999959] 

рдЗрд╕рдиреЗ 582 рдХрджрдо рдЙрдард╛рдП:



рдПрдВрдЯреА-рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдВрджреЛрд▓рди

рд╣рдо рдврд╛рд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреНрдпреЛрдВ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ? рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ: x rightarrowx+ Deltax Rightarrowy rightarrow рд▓рдЧрднрдЧy+ nablaxy cdot Deltax ред рдХрдо рд╕реЗ рдХрдо рдп ред рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкрдбрд╝реЛрд╕ рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЫреЛрдЯреЗ, рд▓реЗрдХрд┐рди рдЗрд╖реНрдЯрддрдо рдЪрд░рдгреЛрдВ рдореЗрдВ, рдЙрддреНрдкрд╛рдж рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред  nablaxy cdot Deltax ред рд╕реНрдХреВрд▓ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рджреЛ рд╡реИрдХреНрдЯрд░реЛрдВ рдХрд╛ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рдХреЛрдг рдХреЗ рдХреЛрд╕рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЗрди рд╡реИрдХреНрдЯрд░реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рдмрд░рд╛рдмрд░ рд╕рдВрдЦреНрдпрд╛ рд╣реИ : a cdotb= left|a right| left|b right|cos angle(a,b) ред рд╡реИрдХреНрдЯрд░ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрддреНрдкрд╛рдж рдиреНрдпреВрдирддрдо -1 рдХреЗ рдХреЛрд╕рд╛рдЗрди рдХреЗ рд╕рд╛рде рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред 180 рдбрд┐рдЧреНрд░реА рдХреЗ рдХреЛрдг рдкрд░, рдЬрдм рд╡реИрдХреНрдЯрд░ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдиреНрдпреВрдирддрдо рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж  nablaxy cdot Deltax рдЬрдм рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛  Deltax рдПрдВрдЯреА-рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреА рджрд┐рд╢рд╛ рдореЗрдВред


рд╣рдо рдПрдбрдо рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ


рд╣рдо рдЖрдЧреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХрдИ рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ рд╣реИрдВред рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рддрд░реАрдХреЗ ред TensorFlow рдореЗрдВ, рдХрдИ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдбрдо:


 #       , #      adm = tf.train.AdamOptimizer(15).minimize(loss) #   ,    40000  session.run(tf.global_variables_initializer()) train(1e-10, 40000, loss, adm, feed_dict) print('PARAMETERS:', session.run(p)) 

 [Out]: step: 1, current loss: 3868.2291666666665 step: 2, current loss: 34205.72916492336 [...] ENDED ON STEP: 317, FINAL LOSS: 2.424142714263483e-12 PARAMETERS: [2.49999969 2.50000008] 

317 рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рддред рдмрд╣реБрдд рддреЗрдЬред


рд╣рдо рдиреНрдпреВрдЯрди рдХреА рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рддреЗ рд╣реИрдВ


рджреВрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдПрдХ рддрд░реНрдХрд╕рдВрдЧрдд рдлреНрд░реАрд░рд╛рдЗрдб рд╕реНрдиреЛрдмреЛрд░реНрдбрд░ рдХреА рд╕рд╡рд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдорд╛рд░реНрдЧ рдХреЗ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░реЛрдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рди рдкрд░ рди рдХреЗрд╡рд▓ рдврд▓рд╛рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╡рдХреНрд░рддрд╛ рднреАред



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдбрд┐рд╕реЗрдВрдЯ рддрд░реАрдХреЗ рдФрд░ рд╕реЗрдХрдВрдб-рдСрд░реНрдбрд░ рджреЛрдиреЛрдВ рддрд░реАрдХреЗ рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдиреБрдорд╛рдирд┐рдд ( рдЕрдиреБрдорд╛рдирд┐рдд ) рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рддрд░реАрдХреЗ рдХреЗрд╡рд▓ рдмрд┐рдВрджреБ рдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЧреНрд░рд╛рдл рдХреЗ рдврд▓рд╛рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдкрд╣рд▓рд╛ рд╡реНрдпреБрддреНрдкрдиреНрдиред рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рджреВрд╕рд░реА-рдХреНрд░рдо рд╡рд┐рдзрд┐рдпрд╛рдВ, рд╡рдХреНрд░рддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреА рд╣реИрдВ , рджреВрд╕рд░реА рд╡реНрдпреБрддреНрдкрдиреНрди: "рдпрджрд┐ рд╡рдХреНрд░рддрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИ, рддреЛ рдиреНрдпреВрдирддрдо рдХрд╣рд╛рдВ рд╣реЛрдЧрд╛?" рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ:



рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдиреНрдирд┐рдХрдЯрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рдиреНрдпреВрдирддрдо рдмрд┐рдВрджреБ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЯреЗрд▓рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЖрдпрд╛рдореА рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рдмрд╣реБрдкрдж рджреНрд╡рд╛рд░рд╛ рд╕рдиреНрдирд┐рдХрдЯрди рдПрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


f(x) рд▓рдЧрднрдЧf(a)+ fracfтА▓(a)(xтИТa)1!+ fracfтА│(a)(xтИТa)22!


рдиреНрдпреВрдирддрдо рдкрд░ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИ x=aтИТ fracfтА▓(a)fтА│(a) ред рдмрд╣реБрдЖрдпрд╛рдореА рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рджрд┐рдЦрддрд╛ рд╣реИ:



рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ (рд╡реЗрдХреНрдЯрд░ рджрд░реНрдЬ - рд╕рдВрдЦреНрдпрд╛ рдмрд╛рдИрдВ рдУрд░)

рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХ рд╡рд░реНрдЧ рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╣реИ рдЬреЛ рджреВрд╕рд░реЗ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рд╕реЗ рдмрдирд╛ рд╣реИ:


\ boldsymbol {H} y_ {x} = \ start {bmatrix} \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_1 ^ 2} рдФрд░ \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_1 / рдЖрдВрд╢рд┐рдХ x_2} рдФрд░ \ \ cdots & \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_1 \ рдЖрдВрд╢рд┐рдХ x_N} \\ \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_2 \ рдЖрдВрд╢рд┐рдХ x_1} & \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_2 ^ 2} & \ cdots & \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_2 \ рдЖрдВрд╢рд┐рдХ x_N} \\ \ vdots & \ vdots & \ ddots & \ vdots \\ \ frac {рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_N \ \ рдЖрдВрд╢рд┐рдХ x_1} рдФрд░ \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_N \ рдЖрдВрд╢рд┐рдХ x_2} & \ cdots & \ frac {\ рдЖрдВрд╢рд┐рдХ ^ 2y} {\ рдЖрдВрд╢рд┐рдХ x_N ^ 2} \ рдЕрдВрдд {bmatrix}


рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдврд╛рд▓ рдФрд░ рдПрдХ рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдХреНрд░рдо рдХреЗ рдмрд╣реБрдкрдж рдХрд╛ рдЕрдиреБрдорд╛рди рдПрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


f(x) рд▓рдЧрднрдЧf(a)+(xa) intercal[ nablaxf(a)]+ frac12!(xa) intercal[boldsymbolH]fx(a)](xa)


рдиреНрдпреВрдирддрдо рдкрд░ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИ x = a - [\ boldsymbol {H} f_ {x} (a)] ^ - - 1} [\ nabla_ {x} f (a)] ред рдЖрдХрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ-рдЖрдпрд╛рдореА рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ: рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдХреЛ рдПрдХ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛, рджреВрд╕рд░реЗ рдХреЛ рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ред рдЖрдк рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд╡реНрдпреБрддреНрдХреНрд░рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЯреА рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╕рдВрдХреНрд░рдордг ред рд╕реВрддреНрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдПрдХ рд╕реНрддрдВрдн рд╣реИред рдЯреНрд░рд╛рдВрдЬрд╝реЛрдЬрд╝ рдПрдХ рдХреЙрд▓рдо рд╡реЗрдХреНрдЯрд░ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ ред TensorFlow рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ: рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡реЗрдХреНрдЯрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдПрдХ-рдЖрдпрд╛рдореА рдЯреЗрдВрд╕рд░) рд╣реИред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ: рд╡рд╛рд╖реНрдкреЛрддреНрд╕рд░реНрдЬрди 90 рдбрд┐рдЧреНрд░реА рдХрд╛ рдПрдХ рдШреБрдорд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╣реА рдХреНрд░рдо рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред


рддреЛ, рдиреНрдпреВрдЯрди рд╡рд┐рдзрд┐ рдХреЗ рдХрджрдо рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдк рд╣реИрдВ:


\ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ \ _ to )]


TensorFlow рдореЗрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╣реИ:


 #        hess = tf.hessians(loss, p)[0] #    - grad_col = tf.expand_dims(grad, -1) # ,      dp = tf.matmul(tf.linalg.inv(hess), grad_col) #  -  - dp = tf.squeeze(dp) #  p  dp    newton = opt.apply_gradients([(dp, p)]) #   ,    40000  session.run(tf.global_variables_initializer()) train(1e-10, 40000, loss, newton, feed_dict) print('PARAMETERS:', session.run(p)) 

 [Out]: step: 1, current loss: 3868.2291666666665 step: 2, current loss: 105.04357496954218 step: 4, current loss: 9.96663526704236 ENDED ON STEP: 6, FINAL LOSS: 5.882202372519996e-20 PARAMETERS: [2.5 2.5] 

рдкрд░реНрдпрд╛рдкреНрдд 6 рдЪрд░рдг:



рдЧреЙрд╕-рдиреНрдпреВрдЯрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд


рдиреНрдпреВрдЯрди рдХреА рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рджреЛрд╖ рд╣реИ - рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ред TensorFlow рдХреА рдмрджреМрд▓рдд рд╣рдо рдЗрд╕реЗ рдХреЛрдб рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЧрд┐рди рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдХреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреЛрд╣рд╛рди рдХрд╛рд░реНрд▓ рдлреНрд░реЗрдбрд░рд┐рдХ рдЧреЙрд╕ рдиреЗ 1809 рдореЗрдВ рдЕрдкрдиреА рдкрджреНрдзрддрд┐ рдХрд╛ рдкрд╣рд▓рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдЕрдм рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреЙрд╕-рдиреНрдпреВрдЯрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЧрдгрдирд╛рдУрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрдХреЛрдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рдиреНрдирд┐рдХрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ: рд▓реБрдбрд╡рд┐рдЧ рдУрдЯреЛ рд╣реЗрд╕реЗ (рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрдирдХреЗ рдирд╛рдо рдкрд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛) 1811 рдореЗрдВ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ - рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ 2 рд╕рд╛рд▓ рдмрд╛рджред рдФрд░ рдХрд╛рд░реНрд▓ рдЧреБрд╕реНрддрд╛рд╡ рдЬреИрдХреЛрдмреА 5 рд╕рд╛рд▓ рдХрд╛ рдерд╛ред


рдЧреЙрд╕-рдиреНрдпреВрдЯрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЖрд░(рдкреА) ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдПрдХ рдЗрдирдкреБрдЯ рд╡реЗрдХреНрдЯрд░ рд▓реЗрддрд╛ рд╣реИ рдкреА рдФрд░ рдПрдХ рдЕрд╡рд╢рд┐рд╖реНрдЯ рд╡реЗрдХреНрдЯрд░ рджреЗрддрд╛ рд╣реИ ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗрдХреНрдЯрд░ рдкреА 2 рдШрдЯрдХ (рдкреИрд░рд╛рдореАрдЯрд░) рд╣реЛрддреЗ рд╣реИрдВ рдПрдХ рдФрд░ рдм рд░реЛрд╕реЗрдирдмреНрд░реЙрдХ рдлрд╝рдВрдХреНрд╢рдВрд╕), рдФрд░ рдЕрд╡рд╢рд┐рд╖реНрдЯ рд╡реЗрдХреНрдЯрд░ рд╕реЗ рдПрдо рдШрдЯрдХ (рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░)ред рд╡реЗрдХреНрдЯрд░ рддрд░реНрдХ рдХрд╛ рд╡реЗрдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди:


рдЬреИрдХреЛрдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕ (рд╡реЗрдХреНрдЯрд░ рджрд░реНрдЬ - рд╡реЗрдХреНрдЯрд░ рдЬрд╛рд░реА)

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реЗрдХреНрдЯрд░ рднреА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: f: mathbbRN rightarrow mathbbRM ред рдпреМрдЧрд┐рдХ рдЪ рдмрд┐рдВрджреБ рдкрд░ x рдЕрдм рдЖрдХрд╛рд░ рд╣реИ N рдЧреБрдирд╛M , рдЬрд┐рд╕реЗ рдЬреИрдХреЛрдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдЗрд╕рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдбреЗрд░рд┐рд╡реЗрдЯрд┐рд╡ рдХреЗ рд╕рднреА рд╕рдВрдпреЛрдЬрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


\ boldsymbol {J} y_ {x} = \ start {pmatrix} \ frac {\ рдЖрдВрд╢рд┐рдХ y_ {1}} {\ рдЖрдВрд╢рд┐рдХ x_ {1}} & \ cdots & \ frac {\ рдЖрдВрд╢рд┐рдХ y {1}} {\ _ \ _ рдЖрдВрд╢рд┐рдХ x_ {N}} \\ \ vdots & \ ddots & \ vdots \\ \ frac {\ рдЖрдВрд╢рд┐рдХ y_ {M}} {\ рдЖрдВрд╢рд┐рдХ x_ {1}} & \ cdots & \ frac {рдЖрдВрд╢рд┐рдХ y_ {M}} {рдЖрдВрд╢рд┐рдХ x_ {N}} \ end {pmatrix}


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬреИрдХреЛрдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдШрдЯрдХреЛрдВ рдХреЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рд╣реИрдВ рдп ред рддрддреНрддреНрд╡ (i,j) рдореИрдЯреНрд░рд┐рдХреНрд╕  frac рдЖрдВрд╢рд┐рдХy рдЖрдВрд╢рд┐рдХx рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ  frac рдЖрдВрд╢рд┐рдХyi рдЖрдВрд╢рд┐рдХxj рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ yi рдЬрдм рдмрджрд▓ рд░рд╣рд╛ рд╣реЛ xj рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдореВрд▓реНрдп рдкрд░ред рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЛрдВ рдХреА рддрд░рд╣, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


x rightarrowx+ Deltax Rightarrowy rightarrow рд▓рдЧрднрдЧy+ boldsymbolJyx Deltax


рдпрд╣рд╛рдВ  рд╕реБрдирд╣рд░рд╛Jyx рдореИрдЯреНрд░рд┐рдХреНрд╕ N рдЧреБрдирд╛M , рдФрд░  Deltax рдЖрдХрд╛рд░ рд╡реЗрдХреНрдЯрд░ рдПрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрд╛рдж  boldsymbolJyx Deltax рд╡реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрддреНрдкрд╛рдж рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдПрдо ред


рд╡рд░реНрдгреЛрдВ рдХреА рдмрд╣реБрддрд╛рдпрдд рдореЗрдВ рднреНрд░рдорд┐рдд рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ  boldsymbolJr - рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдкрд░ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЬреИрдХреЛрдмреА рдореИрдЯреНрд░рд┐рдХреНрд╕  boldsymbolp ред рддрдм рдЧреЙрд╕-рдиреНрдпреВрдЯрди рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


\ boldsymbol {p} \ rightarrow \ boldsymbol {p} - [\ boldsymbol {J} _ {r} ^ \ intercal \ boldsymbol {J} _ {r}] ^ {- 1 = \ boldsymbol {J} _ {r} } ^ \ intercal r (\ boldsymbol {p})


рдлреЙрд░реНрдо рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреНрдпреВрдЯрди рдХреА рд╡рд┐рдзрд┐ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдХреЗрд╡рд▓ рд╣реЗрд╕рд┐рдпрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ \ _ рд╕реБрдирд╣рд░рд╛ {J} _ {r} ^ \ intercal \ boldsymbol {J} _ {r рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдХреЗ рдмрдЬрд╛рдп  boldsymbolJ rintercalr( boldsymbolp) ред рдЕрдЧрд▓рд╛, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдиреНрдирд┐рдХрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдмреАрдЪ, рдЪрд▓реЛ TensorFlow рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ:


 #  ,  TensorFlow     , #   ,        #  .  ,   : # 1)       tf.unstack(r) # 2)      tf.gradients(r_i, p) # 3)       tf.stack #      ,     #       j = tf.stack([tf.gradients(r_i, p)[0] for r_i in tf.unstack(r)]) jT = tf.transpose(j) #     - r_col = tf.expand_dims(r, -1) #      hess_approx = tf.matmul(jT, j) grad_approx = tf.matmul(jT, r_col) # ,      dp = tf.matmul(tf.linalg.inv(hess_approx), grad_approx) #  -  - dp = tf.squeeze(dp) #  p  dp    ng = opt.apply_gradients([(dp, p)]) #   ,    40000  session.run(tf.global_variables_initializer()) train(1e-10, 40000, loss, ng, feed_dict) 

 [Out]: step: 1, current loss: 3868.2291666666665 step: 2, current loss: 14.653025157673625 step: 4, current loss: 4.3918079172783016e-07 ENDED ON STEP: 4, FINAL LOSS: 3.374364957618591e-17 PARAMETERS: [2.5 2.5] 

рдкрд░реНрдпрд╛рдкреНрдд 4 рдХрджрдоред рдиреНрдпреВрдЯрди рдХреА рд╡рд┐рдзрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдб рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдиреБрдХрд╕рд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдорд╛рдирджрдВрдб рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ рдорд╛рдирджрдВрдб рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдиреБрдХреВрд▓рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреИрд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИ? рдЬрд╡рд╛рдм рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ: рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ! рдЧреЙрд╕-рдиреНрдпреВрдЯрди рдиреНрдпреВрдирддрдо рдорддрд▓рдм рдЪреБрдХрддрд╛ рддреНрд░реБрдЯрд┐ рд╣реИ ред


рд▓реЗрдЦ рдХреЗ рдЧрдгрд┐рддреАрдп рднрд╛рдЧ рдХреЛ рдареАрдХ рдХрд░реЗрдВ


рд╣рдордиреЗ рдЕрдкрдиреА рдЬрд░реВрд░рдд рдХрд╛ рд╕рд╛рд░рд╛ рдЧрдгрд┐рдд рджреЛрд╣рд░рд╛рдпрд╛ред рдЖрдЗрдП рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ TensorFlow рдкрд░ рдЖрдЧреЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд░реЗрдВред рдЧрдгрд┐рддреАрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдкреЗрдВрд╕рд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред


рдПрдХ рдореЙрдбрд▓ рд╣реИ y=f(x,p) рдЬрд╣рд╛рдБ x - рд╡реЗрдХреНрдЯрд░ рдкреА - рдЖрдпрд╛рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдПрди , рдФрд░ рдп - рд╕реНрдХреЗрд▓рд░ред рдкреНрд░рд╛рдкреНрдд рдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдПрдо рдЕрдВрдХ (x1,y1),...,(xm,ym) ( рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗ )ред рд╡реЗрдХреНрдЯрд░ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реЗрдХреНрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: r(p)=(r1(p),...rm(p)) рдЬрд╣рд╛рдБ rk(p)=ykтИТ widehatyk=ykтИТf(xk,p) ред , p , xk,yk ? , xk,yk , .


p , ( sum of squared error тАФ sse residual sum-of-squares тАФ rss ) . mse sse , рдПрдо ред . :


loss(p)=r21(p)+тЛп+r2m(p)=mтИСk=1r2k(p)


p (p) ред


, . тАФ . тАФ , r2 2rтИВrтИВp ред :


тИЗploss=(mтИСk=12rkтИВrkтИВp1,тЛп,mтИСk=12rkтИВrkтИВpn)


. :


[Hlossp]ij=тИВ2lossтИВpiтИВpj=mтИСk=1(2тИВrkтИВpiтИВrkтИВpj+2rkтИВ2rkтИВpiтИВpj)


. , , (uv)тА▓=uтА▓v+uvтА▓ ред
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! .


, , , тАФ 2rkтИВ2rkтИВpiтИВpj ред , , rk , . тАФ . , ? -.


:


Jr=(тИВr1тИВp1тЛптИВr1тИВpnтЛотЛ▒тЛотИВrmтИВp1тЛптИВpmтИВpn)


, , . рдзреНрдпрд╛рди рджреЗрдВ:


2JтК║rJrтЙИHlossp


"" . ( ). , тАФ 2rkтИВ2rkтИВpiтИВpj , .
( ):


2JтК║rr=тИЗploss


, , - тАФ , mse .



. , , . рдПрдо (x1,y1),...,(xm,ym) , y=rosenbrock(x,p) ред p , .


, : " . - ! ". , , , ( supervised learning ). , . : ( training set ) тАФ ; тАФ ( prediction model ) ; тАФ , .


( multi-layer perceptron neural network mlp ). , , :


  • ( starting values ) . Xavier'a, .
  • ( overfitting ). тАФ . , . тАФ .
  • ( scaling of the input ). , .

9 . 500:


 #    def get_random_rosenbrock_data_points(m): result = np.zeros((m, 3)) result[:, 0] = np.random.uniform(-2, 2, m) result[:, 1] = np.random.uniform(-2, 2, m) result[:, 2] = rosenbrock(result[:, 0], result[:, 1], 2.5, 2.5) return result m = 500 data_points = get_random_rosenbrock_data_points(m) # overfitting   ,      validation_data_points = get_random_rosenbrock_data_points(m) 

500 . тАФ ( learner ), ( outcome measurement ) ( features ) .



( network diagram ). MatLab:



( input ). W ( weights ) 2x10, b ( bias ) 10, ( activation ). () ( hidden layer ) 10 . , , ( output ).


, , ( tanh ):


h1=tanh(xW1+b1)╦Жy=h1W2+b2


:


h1=tanh([x1x2][w(1)1,1тЛпw(1)1,10w(1)2,1тЛпw(1)2,10]+[b(1)1тЛпb(1)10])╦Жy=[h(1)1тЛпh(1)10][w(2)1,1тЛоw(2)1,10]+b2


. W1 "" h1 , - W2 ред 41 . , .


m├Ч2 , . - ╦Жy рд╕реЗ рдПрдо :


 #     10 "" n_hidden = 10 #      Xavier'a initializer = tf.contrib.layers.xavier_initializer() #    x = tf.placeholder(tf.float64, shape=[m, 2]) y = tf.placeholder(tf.float64, shape=[m, 1]) #         W1 = tf.Variable(initializer([2, n_hidden], dtype=tf.float64)) b1 = tf.Variable(initializer([1, n_hidden], dtype=tf.float64)) #   ,  tanh   h1 = tf.nn.tanh(tf.matmul(x, W1) + b1) #        W2 = tf.Variable(initializer([n_hidden, 1], dtype=tf.float64)) b2 = tf.Variable(initializer([1], dtype=tf.float64)) #   y_hat = tf.matmul(h1, W2) + b2 #  r = y - y_hat #   mse     loss = tf.reduce_mean(tf.square(r)) #      placeholder feed_dict = {x: data_points[:,0:2], y: data_points[:,2:3]} validation_feed_dict = {x: validation_data_points[:,0:2], y: validation_data_points[:,2:3]} 

Adam


Adam rosenbrock ред mse :


 #    adm = tf.train.AdamOptimizer(1e-2).minimize(loss) session.run(tf.global_variables_initializer()) #   ,    40000  train(1e-10, 40000, loss, adm, feed_dict) print('VALIDATION LOSS: '+str(session.run(loss, validation_feed_dict))) 

 [Out]: step: 1, current loss: 671.4242576535694 [...] ENDED ON STEP: 40000, FINAL LOSS: 0.22862158574440725 VALIDATION LOSS: 0.29000289644978866 

. : , , .



rosenbrock 2 . :


  • . 9 , 500. .
  • . - p , .

:


 #      y   x def jacobian(y, x): loop_vars = [ tf.constant(0, tf.int32), tf.TensorArray(tf.float64, size=m), ] #  -   #      _, jacobian = tf.while_loop( lambda i, _: i < m, #           #   (-),   x     lambda i, res: (i+1, res.write(i, tf.reshape(tf.gradients(y[i], x), (-1,)))), loop_vars) #       return jacobian.stack() #       r_flat = tf.squeeze(r) #        #       parms = [W1, b1, W2, b2] parms_sizes = [tf.size(p) for p in parms] j = tf.concat([jacobian(r_flat, p) for p in parms], 1) jT = tf.transpose(j) #           hess_approx = tf.matmul(jT, j) grad_approx = tf.matmul(jT, r) 

Jrp . , 4 W1,b1,W2,b2 ред 4 JrW1,Jrb1,JrW2,Jrb2 tf.concat .


. tf.while_loop , ri , , stack .


ri W1 : [тИВriтИВw(1)1,1тЛптИВriтИВw(1)1,10тИВriтИВw(1)2,1тЛптИВriтИВw(1)2,10] ред tf.reshape (-1,) [тИВriтИВw(1)1,1тЛптИВriтИВw(1)1,10тИВriтИВw(1)2,1тЛптИВriтИВw(1)2,10] ред


. - . тАФ TensorFlow . тАФ - - W1,b1,W2,b2 ред -. Levenberg-Marquardt Jupyter Notebook rosenbrock_train.py . , TensorFlow . - , ( ) , , .


-


hess_approx grad_approx -. rosenbrock , . :


  1. : ╬Фp=[╬Фw(1)1,1тЛп╬Фw(1)2,10╬Фb(1)1тЛп╬Фb(1)10╬Фw(2)1,1тЛп╬Фw(2)1,10╬Фb2]
  2. :
    ╬ФW1=[╬Фw(1)1,1тЛп╬Фw(1)2,10] ред ╬Фb1=[╬Фb(1)1тЛп╬Фb(1)10] ред ╬ФW2=[╬Фw(2)1,1тЛп╬Фw(2)1,10] ред ╬Фb2=[╬Фb2] ред
  3. , :
    ╬ФW1=[╬Фw(1)1,1тЛп╬Фw(1)1,10╬Фw(1)2,1тЛп╬Фw(1)2,10] ред ╬ФW2=[╬Фw(2)1,1тЛо╬Фw(2)1,10]
  4. .

 # 1.     dp_flat = tf.matmul(tf.linalg.inv(hess_approx), grad_approx) # 2.     dps = tf.split(dp_flat, parms_sizes, 0) # 3.     for i in range(len(dps)): dps[i] = tf.reshape(dps[i], parms[i].shape) # 4.  :       gn = opt.apply_gradients(zip(dps, parms)) #   session.run(tf.global_variables_initializer()) train(1e-10, 100, loss, gn, feed_dict) 

 [Out]: step: 1, current loss: 548.8468777701685 step: 2, current loss: 49648941.340197295 InvalidArgumentError: Input is not invertible. 

- . , . - , .


, .


-


. Matlab trainlm . . MathWorks.


- : pтЖТpтИТ[JтК║rJr]тИТ1JтК║rr(p) ред - :


pтЖТpтИТ[JтК║rJr+╬╝I]тИТ1JтК║rr(p)


 рдореБ рдореИрдВ рдПрди ( ).  рдореБ , -. , . , LM -.


:


 mu = tf.placeholder(tf.float64, shape=[1]) n = tf.add_n(parms_sizes) I = tf.eye(n, dtype=tf.float64) # 1.     dp_flat = tf.matmul(tf.linalg.inv(hess_approx + tf.multiply(mu, I)), grad_approx) # 2.     dps = tf.split(dp_flat, parms_sizes, 0) # 3.     for i in range(len(dps)): dps[i] = tf.reshape(dps[i], parms[i].shape) # 4.  :       lm = opt.apply_gradients(zip(dps, parms)) 

 рдореБ ? LM - . , . ,  рдореБ , . тАФ , mse . , :


 #       store = [tf.Variable(tf.zeros(p.shape, dtype=tf.float64)) for p in parms] #  TensorFlow       save_parms = [tf.assign(s, p) for s, p in zip(store, parms)] restore_parms = [tf.assign(p, s) for s, p in zip(store, parms)] #   mu    3. feed_dict[mu] = np.array([3.]) step = 0 session.run(tf.global_variables_initializer()) #    mse current_loss = session.run(loss, feed_dict) #    100   while current_loss > 1e-10 and step < 100: step += 1 #  1, 2, 4...   if math.log(step, 2).is_integer(): print(f'step: {step}, mu: {feed_dict[mu][0]} current loss: {current_loss}') #    session.run(save_parms) # ,     mse while True: #    session.run(lm, feed_dict) new_loss = session.run(loss, feed_dict) if new_loss > current_loss: #  -  mu  10     feed_dict[mu] *= 10 session.run(restore_parms) else: #  -  mu  10     feed_dict[mu] /= 10 current_loss = new_loss break print(f'ENDED ON STEP: {step}, FINAL LOSS: {current_loss}') print('VALIDATION LOSS: '+str(session.run(loss, validation_feed_dict))) 

 [Out]: step: 1, mu: 3.0 current loss: 692.6211687622557 [...] ENDED ON STEP: 100, FINAL LOSS: 0.012346989371823602 VALIDATION LOSS: 0.01859463694102034 

100 LM mse 10 , 40 .


. , . , rosenbrock_train.py .



2D . . . , " " ( curse of dimentionality , Bellman, 1961). . .


:


f(x)=NтИТ1тИСi=1[100(xi+1тИТx2i)2+(1тИТxi)2],x=[x1тЛпxN]тИИRN


rosenbrock_train.py get_rand_rosenbrock_points .


-


- : " ! 4 , 300! ". , ( ) -. , , . - . . : ? , . . , - :


  1. 10 000 6D .
  2. 3 12, 10, 8 (311 ).
  3. .
  4. 3.5 .

. - 2 . LM . 20 .



rosenbrock_train.py . . , .


рдирд┐рд╖реНрдХрд░реНрд╖


, . " ", , . , . , 273 . - , .


, :


  1. .
  2. ( ) -:
    [1] Petros Drineas, Ravi Kannan, and Michael W. Mahoney. 2006. Fast Monte Carlo Algorithms for Matrices I: Approximating Matrix Multiplication. SIAM J. Comput. 36, 1 (July 2006), 132-157. DOI= http://dx.doi.org/10.1137/S0097539704442684
    [2] Adelman, M., & Silberstein, M. (2018). Faster Neural Network Training with Approximate Tensor Operations. CoRR, abs/1805.08079.

, - . , . "".

Source: https://habr.com/ru/post/hi428183/


All Articles